我正在使用Dapper而我正在调用QueryFirst方法,该方法返回以下错误:
错误[42000] [Microsoft] [SQL Server Native Client 10.0] [SQL 服务器]必须声明标量变量\“@ NombreDivision \
public static int GetSegmentoDivision(string division)
{
int res = -1;
try
{
string query = "SELECT [SEGMENTID] FROM [ACCESSCONTROL].[dbo].[SEGMENT] WHERE [NAME] = (SELECT SEGMENTO FROM M4_DIVISION_SEGMENTO WHERE DIVISION = @NombreDivision)";
res = _odbc.QueryFirst<int>(query, new { NombreDivision = division });
}
catch (Exception ex)
{
LogHelper.Log(ex.ToString());
}
return res;
}
我找不到我做错了什么。我甚至还有其他类似的查询正在运行。任何人都可以帮我解决这个问题吗?
感谢。
编辑:我使用OdbcConnection
不确定是否有帮助。
答案 0 :(得分:0)
我已经发现了问题。似乎OdbcConnection
不接受使用&#39; @&#39;的参数化查询。用于在参数之前。相反,你必须使用&#39;?&#39;。然后以严格按照预期在字符串上替换的顺序发送参数。
我找到的解决方案是将值直接发送到查询中。这也不是推荐的。但在我的情况下,我只是控制应用程序的所有流程,所以这个解决方案不是Sql Injection易受攻击的。
更多信息: