2014-01-23 45 views
0

我想要綁定的參數在我的倉庫一個SQL查詢,但有錯誤無法在Insight.Database

public IList<Movie> FindMovieById(int movieId) 
{ 
    return Database.Connection().QuerySql<Movie>("select * from myDB.movies where ID=?", new { movieId }); 
} 

我得到一個OLEDB例外綁定參數。

SQL0313:主機變量的數量無效。 原因。 。 。 。 。 :EXECUTE或OPEN語句中指定的SQLDA或描述符區域中的主機變量或條目數與準備的SQL語句S000001中指定的參數標記數不同。如果語句名稱爲* N,則SQL語句或描述符區域中的宿主變量或條目的數目在OPEN語句中指定,並且與光標C000001的DECLARE CURSOR語句中指定的宿主變量的數目不同。恢復。 。 。 :將USING子句中指定的主機變量數量或SQLDA或描述符區域中的條目數更改爲等於準備好的SQL語句中的參數標記數或DECLARE CURSOR語句中的主機變量數。再次預編譯程序。

我用過嗎?用於參數綁定,因爲OleDb具有由'?'而不是'@parameterName'表示的位置參數。

任何幫助表示讚賞。

+0

您是否嘗試過使用@parameterName語法? – sirchristian

+0

@sirchristian是的,它不能與@ –

+0

你可以發佈C#,不能使用@parameterName? – sirchristian

回答

1

使用Insight.Database可以試試嗎?

return Database.Connection().QuerySql<Movie>(
    "select * from myDB.movies where [email protected]", 
    new { movieId = movieId }); 
0

爲了透視映射查詢對象時,它通過名稱綁定參數,而不是通過位置。

您的參數對象可以是匿名類型。如果指定:

new { movieId } 

我相信編譯器將生成一個名爲「MovieID」

在這種情況下,你的參數應該叫@movieId的屬性。

如果你的數據庫不支持命名參數,請在github上打開一個問題,我可以看看它。

https://github.com/jonwagner/Insight.Database/issues