此查询有效; 也就是说,它返回预期的结果:
var r = sql.Query<T>("select * from TableName where Name = '" + name + "'");
Run Code Online (Sandbox Code Playgroud)
但是,如果其中一个'名称'值包含一个萎缩(这是真的),那么会在'资源'附近抛出一个异常'{"语法错误.\ r \n在字符串''后面有一个未引用的引号."}}' - 为了解决这个问题,我的查询不再返回任何结果; 但它应该.
我试图通过几种方式更改代码,但不会返回以下任何一项更改的结果:
var r = sql.Query<T>("select * from TableName where Name = '@name'", new { name });
Run Code Online (Sandbox Code Playgroud)
要么
var args = new DynamicParameters(name);
var r = sql.Query<T>("select * from TableName where Name = '@name'", args);
Run Code Online (Sandbox Code Playgroud)
要么
var args = new DynamicParameters(); args.AddDynamicParams(new { name });
var r = sql.Query<T>("select * from TableName where Name = '@name'", args);
Run Code Online (Sandbox Code Playgroud)
要么
var args = new DynamicParameters(); args.Add("@name", name);
var r = sql.Query<T>("select * from TableName where Name = '@name'", args);
Run Code Online (Sandbox Code Playgroud)
这可能是一件微不足道的事情,我只是还没有把握这个概念......但我已经花了太多时间试图找出它 - 因此这个问题.
使用参数是正确的方法.您绝对不希望像在第一个代码段中那样将值放入查询本身.但是,你已经放入@name引号,这意味着它被视为字符串文字...它正在寻找一个名称值,@name而不是@name参数的值.你要:
var r = sql.Query<T>("select * from TableName where Name = @name", new { name });
Run Code Online (Sandbox Code Playgroud)
(这可能是传递参数的最简单方法,但其他方法也应该有效.)
现在我自己并没有真正使用过 Dapper,但这就是我所期待的......
| 归档时间: |
|
| 查看次数: |
955 次 |
| 最近记录: |