2012-04-20 49 views
7

使用Dapper,下面引發Incorrect syntax near ','小巧玲瓏和條件下

const string sql = 
    "select * from ZipToZipDistance z where z.NoRouteFound = 0" + 
    " and z.OriginZip in (@zips) or z.DestZip in (@zips)"; 
var zipStrings = zips.Select(x => x.ToString()).ToArray(); 
var result = connection.Query<ZipToZipDistance>(sql, 
    new { zips = zipStrings }); 

嗯,SQL沒有逗號。它必須與參數有關。 OriginZipDestZipvarchar(10)zipsIEnumerable<int>。我嘗試使用zips作爲參數而不轉換爲字符串。同樣的錯誤。

似乎很直接。我究竟做錯了什麼?

+1

從剛纔要是同樣的問題@zips – jaxxbo 2015-02-26 19:10:34

+0

刪除括號,我只是去掉周圍@zips括號/括號。就像jaxxbo說的那樣。 – 2015-11-19 08:43:05

回答

7

嘗試:

const string sql = 
const string sql = 
    "select * from ZipToZipDistance z where z.NoRouteFound = 0" + 
    " and z.OriginZip in @zips or z.DestZip in @zips"; 
var zipStrings = zips.Select(x => x.ToString()); 
var result = connection.Query<ZipToZipDistance>(sql, 
    new { zips = zipStrings }); 
+0

山姆我遇到的問題是,我只能通過IN子句中的2100項,這似乎是一個小巧的限制,因爲當我使用字符串連接構造查詢時,它工作得很好。這裏是我的意思: Working Code: var query = @「SELECT * FROM QuestionTags WHERE QuestionID IN(」+ idsCsvString +「)」; var results = conn.Query (query).ToList(); – Marko 2012-11-28 21:40:59

+0

當我這樣做你的建議我得到以下錯誤: 傳入的表格數據流(TDS)遠程過程調用(RPC)協議流不正確。此RPC請求中提供的參數太多。最大值是2100 – Marko 2012-11-28 21:49:03