这是我用来将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)
产生正确的结果,所以它做的工作,我只是想知道是否有一个捷径?
我正在通过code.google和github学习Dapper .我注意到一些表名称有'#'作为前缀.我尝试使用'#',但它不起作用,我收到一个错误,说我的SQL语法有错误.示例中"#"的含义是什么?
我试图通过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参数化?
我正在尝试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附近搜索,但没有发现类似的错误报告; 似乎我错过了一些非常明显的东西但是唉 - 我的咖啡用完了.我会很感激任何提示.
有没有什么方法可以调用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) 我是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>。
谢谢
在我的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) 我刚刚开始使用Dapper,我想知道哪种交易模式会更好.
当我编写SQL时,我更喜欢使用脚本中已有的事务:
BEGIN TRAN
-- insert, update etc.
COMMIT
Run Code Online (Sandbox Code Playgroud)
因为它更容易测试它,但也有问题交易与dapper dot net 使用.net事务,所以现在我不确定我应该使用哪一个.
这两种方法都有不同的优势吗?
我在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#中的类型.
最近,我重构了一些代码,这些代码导致将实体的某些属性的类型从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) dapper ×10
c# ×8
.net ×2
oracle ×2
sql ×2
t-sql ×2
asp.net-mvc ×1
informix ×1
json ×1
linq ×1
mysql ×1
sql-server ×1
transactions ×1