QueryFirst使用Dapper失败

时间:2017-10-19 18:37:25

标签: c# dapper

我正在使用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不确定是否有帮助。

1 个答案:

答案 0 :(得分:0)

我已经发现了问题。似乎OdbcConnection不接受使用&#39; @&#39;的参数化查询。用于在参数之前。相反,你必须使用&#39;?&#39;。然后以严格按照预期在字符串上替换的顺序发送参数。

我找到的解决方案是将值直接发送到查询中。这也不是推荐的。但在我的情况下,我只是控制应用程序的所有流程,所以这个解决方案不是Sql Injection易受攻击的。

更多信息:

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

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