2012-04-20 73 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