2017-10-19 88 views
0

我使用了Dapper和我打电话QueryFirst方法,返回以下错误:QueryFirst失败使用小巧玲珑

ERROR [42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Must declare the scalar variable \"@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; 
    } 

我找不到它是什么,I'm做错了。我甚至有其他类似的查询正在工作。任何人都可以帮我解决这个问题吗?

谢谢。

编辑:我使用OdbcConnection不知道这是否有帮助。

回答

0

我已经发现问题了。看起来OdbcConnection不接受使用'@'作为参数前面的参数化查询。相反,你必须使用'?'。然后以严格相同的顺序发送参数,因为它们预期会在字符串上被替换。

我找到的解决方案是将正确的值发送到查询中。这也不是理所当然的。但在我的情况下,我只是控制应用程序的所有流程,所以此解决方案不是Sql Injection易受攻击的。

的更多信息:

https://stackoverflow.com/a/16481004/637840

https://stackoverflow.com/a/43651335/637840