2012-04-20 31 views
7

Sử dụng Dapper, sau đây ném Incorrect syntax near ','.Dapper và trong Điều kiện

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 }); 

Hmm, SQL không có dấu phẩy. Nó phải có một cái gì đó để làm với các tham số. OriginZipDestZipvarchar(10). zipsIEnumerable<int>. Tôi đã thử sử dụng tham số zips làm tham số mà không cần chuyển đổi thành chuỗi. Lỗi tương tự.

Có vẻ rất đơn giản. Tôi đang làm gì sai?

+1

Tháo khung từ @zips – jaxxbo

+0

Đã cùng một vấn đề chỉ là bây giờ và tôi chỉ loại bỏ các dấu ngoặc/ngoặc xung quanh @zips. Chỉ cần iike jaxxbo nói. –

Trả lời

7

thử:

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

Sam vấn đề tôi đang chạy là tôi chỉ có thể vượt qua 2100 mục trong mệnh đề IN mà dường như là một giới hạn dapper bởi vì khi tôi xây dựng truy vấn bằng cách sử dụng chuỗi nối nó hoạt động tốt. Dưới đây là những gì tôi có ý nghĩa: Mã làm việc: var truy vấn = @ "SELECT * FROM QuestionTags WHERE QuestionID IN (" + idsCsvString + ")"; var results = conn.Query (truy vấn) .ToList(); – Marko

+0

Khi tôi thực hiện theo cách bạn đề xuất tôi gặp lỗi sau: Luồng giao thức cuộc gọi thủ tục từ xa (TDS) luồng dữ liệu đến (TDS) từ xa không chính xác. Có quá nhiều tham số được cung cấp trong yêu cầu RPC này. Tối đa là 2100 – Marko