如何将查询中的字符串与Dapper

时间:2017-12-05 11:32:59

标签: c# asp.net .net sql-server dapper

您好我正在使用Dapper,我有这个问题:

var sql = @"Select * From CartFilm Where IdUser = @IdUser;";
var sel = connection.Query<CartFilm>(, new { IdUser = user.Id}).FirstOrDefault();

user.Id = "fcdbdc10-c209-4f49-bcbf-c49fg91f70e2"

问题在于我没有得到任何匹配。

我试过直接在MSSQL中找到它,我用同一个引号使用相同的查询,它工作正常。但如果我通过Dapper发送它,我就没有结果。

有没有办法用这个字符串制作WHERE?

列是nvarchar(450)

修改

我找到了解决方案。错误在我的CartFilm模型中,因为我在一列中有null,但我的模型没想到。我要谢谢你的时间!

2 个答案:

答案 0 :(得分:1)

简短版本:您在问题中所拥有的是100%正确。

更长的版本:

Dapper使用查询参数,不需要转义(或任何其他处理)。由于您将new { someString = value }作为参数对象传递,因此value中的值将作为名为someString的ADO.NET参数传递。

如果value是您在C#中用文字@"abc""def'ghi"写的字符串(也就是说:ASCII代码点的序列,其中十六进制值为61-62-63-22- 64-65-66-27-67-68-69),然后在数据库它将被视为相同 - 所以:你将在TSQL中写的字符串作为文字{{1 (再次:ASCII码的序列,十六进制值为61-62-63-22-64-65-66-27-67-68-69)。

请注意,参数值以与主命令/批处理不同的方式发送,因此它永远不会实际以这种TSQL编码的方式编写 - 这就是你在TSQL中处理它的方式告诉它你的文字的起点和终点。参数不需要 - N'abc"def''ghi'就是它所需要的一切。

所以:如果它不匹配任何东西,选项:

  • 你认为存在的价值:根本不存在
  • 你认为存在的价值:实际不存在 - 可能是由于编码问题(unicode不可见字符或非unicode(@someString而不是varchar) )数据)
  • 您的数据库配置为区分大小写,并且您希望它不区分大小写(当值为nvarchar时搜索foo
  • 您的查询中还有另一个不相关的错误

答案 1 :(得分:-5)

也许你可以在没有%%的情况下使用LIKE? &#34; ...在某些方面喜欢&#39; layoutString&#39;&#34;