我正在使用Dapper查询一个我不知道返回的列的SQL过程。我想用CsvHelper将结果写入CSV文件。在运行时,我想动态忽略一些列。CsvHelper有一个只接受预定义类的映射配置。 var records = sqlCon.Query(sqlProcedure); //dynamic columns
using (var writer = new StreamWriter(@"file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
var map =
我使用CsvHelper将dapper对象转换为CsvFiles。我使用类映射来映射索引和名称映射的属性。问题是,在编写记录之前,我需要一个带有表标题的行,如下所述:
我的旧代码没有标题:
using (var writer = new StreamWriter(@"C:\Users\NPandian\Desktop\test.csv", false, System.Text.Encoding.UTF8))
using (var csvWriter = new CsvWriter(writer))
{
va
我有一个这样简单的课程:
public class User
{
public Guid Id{ get; set; }
public string UserName { get; set; }
public byte[] RowVersion { get; set; }
}
dapper中的Rowversion列获得自动value.when i Inser一个具有dapper的用户
var result = db.Execute("[dbo].[User_Insert]", user, trans,commandType:CommandType.Sto
我试图用Dapper.Contrib更新这个表:
public class MyTable
{
public int ID { get; set; }
public int SomeColumn1 { get; set; }
public int SomeColumn2 { get; set; }
public int CreateUserID { get; set; }
public int UpdateUserID { get; set; }
}
我不想更新CreateUserID列,因为它是一个update方法,所以在调用Dapper-Update
我在数据库中加载了一个csv文件,但文件中没有DbId列。 我想把它导出回原来的格式。 我的csvhelper映射在带有Map(m => m.DbId).Ignore();的MyCsvClass中 标题没有问题,但输出数据仍显示DbId列的值:https://dotnetfiddle.net/XP2Vvq using CsvHelper.Configuration;
using System;
using System.IO;
namespace Test
{
class Program
{
static void Main(string[] args
Dapper提供了许多将数据映射到动态对象列表的方法。然而,在某些情况下,我想阅读数据的字典列表。
SQL看起来可能如下:
"SELECT * FROM tb_User"
作为tb_User可能会在外部更改,我不知道结果中哪些列会返回。这样我可以编写如下代码:
var listOfDict = conn.QueryAsDictionary(sql);
foreach (var dict in listOfDict) {
if (dict.Contains("anyColumn")) {
// do right thing...
}
我有一个由Tab分隔的文件,并使用CsvHelper在.Net c#中解析它,不知何故,它在1记录中失败并抛出BadData,记录中没有什么问题,我尝试在excel中粘贴并使用文本对列,它工作得很好。
再现错误的代码
//add CsvHelper nuget package to project
//Create .txt file with below line and pass path of file into function
//copy text from https://gist.github.com/JitenPatoliya/9f9a15eb388c32f46231aa9f
使用Dapper )我正在尝试使用来自使用https://joshclose.github.io/CsvHelper/连接到sqlserver的仪表表的Console.WriteLine输出来编写csv文本文件。 我打开数据库和处理记录的初始代码是 using (var dbconn = new SqlConnection(sb.ConnectionString))
{
var fred = dbconn.Query<Instrument>("SELECT * FROM Instruments");
我使用的是CsvHelper,我希望能够将集合读写为重复列。例如,考虑到:
public class MyCsv
{
public string A { get; set; }
public List<string> Bs { get; set; }
}
var csv = new MyCsv { A = "a", Bs = new List { "b1", "b2" } };
我希望csv被序列化(使用CsvHelper)如下:
A,B,B
a,b1,b2
然后,我需要能够读取序列化的CSV,再次使用CsvHelper
目标Fx:.Net Core 2
CsvHelper: 6.0.0 (最新)
人CSV
Name
Nikhil
Person类
public class Person {
public string Name { get; set; }
public Address Address { get; set; } // Address has AddLine1, Addline2
}
个人地图
public class PersonMap : ClassMap<Person> {
public PersonMap() {
AutoMap();
我在我的一些类型中使用Dapper扩展,它在大多数用例中工作得很好。我遇到过这样一种情况,我有很多种关系,我想做这样的事情:-
SELECT id,a,b,c FROM Foo WHERE Foo.id in (SELECT foo_id FROM foo-bar WHERE bar-id=@bar_id)
显然,Dapper扩展可以从Foo处理"SELECT id,a,b,c“,但不能处理后一部分。我可以做一个选择来获得我想要的Foo id的列表,然后将它传递给Dapper扩展,但是效率不高。
我不能用平原Dapper自动获得SELECT列列表,所以我真正想要的是:-
从Dapp
我在用达珀和甲骨文。Oracle查询结果列不区分大小写(除非双引号),而且Oracle以大写形式返回列名。因此,在使用dynamic时,Dapper需要使用大写字段名。
有什么办法让Dapper在使用动态时不关心大小写吗?我在DapperTable 中看到,它使用带StringComparer.Ordinal而不是StringComparer.OrdinalIgnoreCase的字典,并且我没有看到任何改变它的选项。但我希望有人能解决这个问题,或者告诉我如何更好地解决这个问题。
示例:
var r = cnn.Query("select 'apple' fruit fr
我在dapper中尝试异步支持,当运行一个简单的用例时,我遇到了以下问题。我有一个ApiController,它只触发一个日志条目,使用dapper在数据库中创建它。我的数据库连接很好。当我使用dapper的查询扩展方法运行同步版本时,一切正常。当我使用QueryAsync和异步/等待结构时,我会得到一个InvalidOperationException。下面是代码的样子
public class BackgroundController : ApiController
{
[HttpGet]
public async Task<HttpResponseMessage&g
刚开始使用Dapper,需要一点帮助。我将读取一个.csv文件来动态生成select语句。
.csv文件内容如下所示:
id,fromDate,toDate
1,20100101,20110101
2,20110101,20120101
3,20100101,20120101
etc...
我需要动态生成的查询应该是:
SELECT * FROM targetTable WHERE (id = 1 AND cDate BETWEEN 20100101 AND 20110101) OR (id = 2 AND cDate BETWEEN 20110101 AND 20120101) OR
OR
我正在处理一个项目,该项目将在CSV文件中序列化/存储对象。(是的,我知道这不是最好的做法,但这是必须的。)
我试图保持我的解决方案干净,所以我在解决方案中有多个项目,其中一个是包含存储/序列化方法的库项目。这个项目引用了CSVhelper,一个第三方库,我喜欢用它来做CSV操作。
A项目中的()
foo myobject = new foo(x,y,z);
B.WriteToCsv(myobject);
项目B中的 (my,引用csvhelper)
public static WriteToCsv(foo myobject); // csvhelper would do the work
但
我是达珀的新生儿。尝试将CRUD操作与Dapper和Dapper.SimpleCRUD库结合起来。这是样本代码..。
我的数据模型看起来
Class Product
{
public string prodId {get;set;}
public string prodName {get;set;}
public string Location {get;set;}
}
Dapper实现-插入
public void Insert(Product item)
{
using(var con = GetConnection())
{
con.Insert(
使用CsvHelper和ClassMap将对象模型映射到输出。试图通过lambda表达式动态生成映射。到目前为止:
public class BaseClassMap<TClass> : ClassMap<TClass> where TClass : class
{
public BaseClassMap(List<string> columns)
{
var index = 0;
PropertyInfo[] props = typeof(TClass).GetProperties();
fo
如何防止Dapper中的SQL隐式转换?
我们意识到,我们正在进行SQL隐式转换,导致索引扫描和死锁。Dapper参数是nvarchar,而SQL表列是varchar。这导致我们的所有sql列都转换为nvarchar。
我们通过遍历所有嵌入的Dapper代码并将列转换为cast(@SSN as varchar(9)), cast(@LastName as varcarh(25)), cast(@EmployeeId as varchar(10)来解决这个问题。
一定有更简单的方法,是吗?
我读过这个博客,只是我们没有像这个例子那样设置字符串:
new { queryPlanHash = arg
当尝试使用Dapper作为参数传递一个空项列表时,我将获得一个空引用异常。通常,在where子句中,我只需执行以下操作:
"AND (@Sections IS NULL OR Section IN @Sections)";
但是我无法做到这一点,因为即使在节列表中有项目时,它也不能工作。Dapper将它们添加为参数,并且(@sections1,@sections2为NULL或)将出错。如果我不想使用它作为筛选器,所以我的节列表为空,我就会得到一个空引用异常。
我的函数必须有一个节列表作为可选参数。这样,在我的代码中,我不必总是向查询中添加区段筛选器。如何在函数参数中使节成为可空
我使用的方法具有IEnumerable<dynamic>的返回签名符。在运行时,对于特定的调用,它将返回List<Dapper.SqlMapper.FastExpando>。
var x0 = repo.Find(proc, param);
//x0 runtime type is {List<Dapper.SqlMapper.FastExpando>}
LINQPad.Extensions.Dump表示x0的运行时类型为:List<IDictionary<String, Object>>,但我似乎无法将其转换为List<ID