标签: dapper

从Dapper结果创建二维数组

这是我用来将Dapper查询结果转换为二维数组的最少量代码吗?

var array =
    cn.Query(@"SELECT Id, Desc FROM Things")
        .Select<object, ArrayList>(d =>
        {
            return new ArrayList {((dynamic) d).Id, ((dynamic) d).Desc };
        });
Run Code Online (Sandbox Code Playgroud)

我基本上构造一个结果作为json响应返回如下:

[
  [1, "Thing one"],
  [2, "Thing two"],
  [3, "Thing two"],
]
Run Code Online (Sandbox Code Playgroud)

序列化array使用:

string json = Newtonsoft.Json.JsonConvert.SerializeObject(array); 
Run Code Online (Sandbox Code Playgroud)

产生正确的结果,所以它做的工作,我只是想知道是否有一个捷径?

c# linq dapper

2
推荐指数
1
解决办法
3474
查看次数

Dapper示例中的'#'是什么?

我正在通过code.googlegithub学习Dapper .我注意到一些表名称有'#'作为前缀.我尝试使用'#',但它不起作用,我收到一个错误,说我的SQL语法有错误.示例中"#"的含义是什么?

sql dapper

2
推荐指数
1
解决办法
122
查看次数

使用Informix和Dapper向查询添加参数失败,并出现语法异常

我试图通过ODBC在Informix上使用参数化查询,但任何添加参数的尝试都会失败并出现以下异常:

$exception {"ERROR [42000] [Informix .NET provider][Informix]A syntax error has occurred."} System.Exception {IBM.Data.Informix.IfxException}

这是失败的代码:

List<ItemAttribute> items = con.Query<ItemAttribute>("select * from oe_cnvwrk where cwr_genero = @cwr_genero", new{cwr_genero = cwr_genero}).ToList();

像这个例子一样使用没有参数的它可以完美地工作,但是打开应用程序直到注入攻击:

ItemHeader itemHeader = con.Query<ItemHeader>("select * from oe_cnvhdr where hdr_control_id = " + hdr_control_id).Single();

我能够在这里找到一个关于这个完全相同问题的先前列出的问题,但它从未被回答过.我希望有人会知道如何处理这个问题:Dapper没有添加参数

任何想法都可以解决这个问题,或者是否有一种不同的方法来处理可能有效的Dapper参数化?

c# asp.net-mvc informix dapper

2
推荐指数
1
解决办法
981
查看次数

Dapper和Oracle参数化查询 - ORA-01036:非法变量名称/编号

我正在尝试Dapper.以下代码完美无缺:

using (var conn = 
    new OracleConnection(
        "Uid=dbusr;Pwd=dbusrpwd;Server=oraserver;"))
{
    var col = 
        conn.Query<User>(
        "SELECT * FROM Users WHERE UserName = 'uid01'"
        , null)
        .ToList();
}
Run Code Online (Sandbox Code Playgroud)

但是如果不使用硬编码参数,我会尝试通过参数化查询和匿名类传递它,如下所示:

using (var conn = 
    new OracleConnection(
        "Uid=dbusr;Pwd=dbusrpwd;Server=oraserver;"))
{
    var col = 
        conn.Query<User>(
        "SELECT * FROM Users WHERE UserName = @Id"
        , new { Id = "uid01" })
        .ToList();
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ORA-01036:非法变量名称/编号

我在SO附近搜索,但没有发现类似的错误报告; 似乎我错过了一些非常明显的东西但是唉 - 我的咖啡用完了.我会很感激任何提示.

c# oracle dapper

2
推荐指数
1
解决办法
991
查看次数

sp_executesql中的命名参数

有没有什么方法可以调用sp_executesql参数不依赖于它们在商店中定义的顺序?与exec相同的查询效果很好,并且如果你有相同的顺序它也可以很好地工作,但是一个接一个地匹配参数是一件很痛苦的事情,因为有时候我会通过助手动态地生成调用,如果dto对象没有在相同的顺序中具有相同的字段,不能很好地工作.

create procedure ordertest
  @PARAM1 INT,
  @PARAM2 INT
  AS 
BEGIN
SELECT @PARAM1 AS ONE, @PARAM2 AS TWO
END

-- this works
EXEC ordertest @PARAM1 = 1, @PARAM2 = 2
exec sp_executesql N'exec ordertest @PARAM1, @PARAM2', N'@param1 int, @param2 int', @param2 = '2',  @param1 =  '1'
EXEC ordertest @PARAM2 = 2, @PARAM1 = 1

-- this doesn't work
exec sp_executesql N'exec ordertest @PARAM2, @PARAM1', N'@param1 int, @param2 int', @param2 = '2',  @param1 =  '1'
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sp-executesql dapper

2
推荐指数
1
解决办法
1101
查看次数

将dapper.net的存储过程输出转换为List

我是Dapper.net的新手,我正在尝试使用Dapper.Net执行存储过程。

我有一个模型类StoredProcedureResult,与存储过程的输出有关。

public StoredProcedureResult
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string PhoneNumber { get; set; }
}

conn.Query(SP_name, Param(s), Type). 
Run Code Online (Sandbox Code Playgroud)

该模型的输出是动态检索的。

执行后,我得到以下内容

{{Dapper,Name='Pradeep',Address='UK',PhoneNumber='+4478923984'}}
{{Dapper,Name='Jack',Address='USA',PhoneNumber='+447242344234}}
{{Dapper,Name='Ram',Address='UK',PhoneNumber='+447892423484'}}
Run Code Online (Sandbox Code Playgroud)

我需要将动态输出转换为List<StoredProcedureResult>结构。

经过几次搜索,我发现了这段代码

conn.Query<*Model_name*>(SP_name, Param(s), Type). 
Run Code Online (Sandbox Code Playgroud)

不幸的是,这返回正确的行数,但是行为空。如何将输出转换为List<StoredProcedureResult>

谢谢

c# dapper

2
推荐指数
1
解决办法
3972
查看次数

Dapper与SQL查询动态参数

在我的asp.net网络API中,来自以下代码段的错误为“ ORA-00936:缺少表达式”。我尝试了许多解决方案,但没有克服此错误。我也想知道如何动态绑定多个参数。我使用oracle作为后端,使用dapper作为ORM。

        string empId = json.EMPID; //'15RD005'

        var sql = @"Select id_no,SNO,REASON,APPLIEDDATE,Case
                    when LEAVE_TYPE = 0 then 'CL'
                    when LEAVE_TYPE = 1 then 'EL'
                    when LEAVE_TYPE = 2 then 'SL'
                    when LEAVE_TYPE = 3 then 'OFF'
                    when LEAVE_TYPE = 4 then 'OD-OFF'
                    when LEAVE_TYPE = 5 then 'LOP'
                    when LEAVE_TYPE = 6 then 'OPTIONAL' end LEAVE_TYPE,
                to_char(fromdate,'DD-MON-YYYY') f_date, to_char(todate,'DD-MON-YYYY') t_date,
                    Case when fromslot=0 then 'First-Half' when fromslot=1 then 'Second-Half' when fromslot=2 then 'Full-Day' end From_Slot,
                    Case when toslot=0 then 'First-Half' …
Run Code Online (Sandbox Code Playgroud)

c# sql oracle dapper asp.net-web-api

2
推荐指数
1
解决办法
6933
查看次数

使用Dapper哪个交易更好:BEGIN TRAN或TransactionScope?

我刚刚开始使用Dapper,我想知道哪种交易模式会更好.

当我编写SQL时,我更喜欢使用脚本中已有的事务:

BEGIN TRAN

-- insert, update etc.

COMMIT
Run Code Online (Sandbox Code Playgroud)

因为它更容易测试它,但也有问题交易与dapper dot net 使用.net事务,所以现在我不确定我应该使用哪一个.

这两种方法都有不同的优势吗?

c# t-sql transactions dapper

2
推荐指数
1
解决办法
3356
查看次数

如何使用Dapper映射MySQL JSON列

我在MySQL数据库中有一个表,其中包含一个JSON数据类型列.是否可以检索存储在该列中的JSON数据并使用Dapper映射到我的c#类?下面是关于数据如何存储在列中的示例JSON.

[
        {
            "ServerName": "",
            "Priority": 1,
            "FilesystemBasePath": "",
            "IsAvailable": 1,
            "ApplicationDocumentType": ""
        },
        {
            "ServerName": "",
            "Priority": 2,
            "FilesystemBasePath": "",
            "IsAvailable": 1,
            "ApplicationDocumentType": ""
        }
]
Run Code Online (Sandbox Code Playgroud)

我希望数据映射到List<MyObject>C#中的类型.

.net c# mysql json dapper

2
推荐指数
1
解决办法
2398
查看次数

如何解析Dapper System.Data.DataException HResult = 0x80131501 InvalidCastException从'System.String'到'System.Uri'的无效转换

最近,我重构了一些代码,这些代码导致将实体的某些属性的类型从System.String更改为System.URI。有问题的属性名称包含子字符串URI或URL,并且SonarLint静态代码分析器建议将代码重构为使用System.URI类型而不是System.String这些属性,这在我们的解决方案中很有意义。

在这个项目中,我们将StackExchange的Dapper用作超快速轻量级的对象映射器,但是在重构之后,当我尝试从存储库中检索数据时,我开始收到此错误:

System.Data.DataException
  HResult=0x80131501
  Message=Error parsing column 5 (RequestUrl=https://www.myurl.com/api/wow - String)
  Source=Dapper
  StackTrace:
   at Dapper.SqlMapper.ThrowDataException(Exception ex, Int32 index, IDataReader reader, Object value) in C:\projects\dapper\Dapper\SqlMapper.cs:line 3609
   at Dapper.SqlMapper.<>c__DisplayClass156_0`8.<GenerateMapper>b__1(IDataReader r) in C:\projects\dapper\Dapper\SqlMapper.cs:line 1544
   at Dapper.SqlMapper.<MultiMapImpl>d__153`8.MoveNext() in C:\projects\dapper\Dapper\SqlMapper.cs:line 1444
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Dapper.SqlMapper.<MultiMapAsync>d__52`8.MoveNext() in C:\projects\dapper\Dapper\SqlMapper.Async.cs:line 949
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at My.Namespace.MyRepository.<GetAllRepositoryMethod>d__2.MoveNext() in C:\dev\repos\myproject\MyRepository.cs:line 59
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at My.Namespace.Program.CallerMethod(Object …
Run Code Online (Sandbox Code Playgroud)

.net c# dapper

2
推荐指数
1
解决办法
258
查看次数