您好我正在使用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
,但我的模型没想到。我要谢谢你的时间!
答案 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'
就是它所需要的一切。
所以:如果它不匹配任何东西,选项:
@someString
而不是varchar
) )数据)nvarchar
时搜索foo
)答案 1 :(得分:-5)
也许你可以在没有%%的情况下使用LIKE? &#34; ...在某些方面喜欢&#39; layoutString&#39;&#34;