2017-10-19 136 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