2012-04-20 13 views
7

Dapper'ı kullanarak, aşağıdaki Incorrect syntax near ',''u atar.Dapper ve In Koşul

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'de virgül yok. Parametre ile ilgili bir şey olmalı. OriginZip ve DestZip, varchar(10)'dur. zips, IEnumerable<int>. zips parametresini, dizelere dönüştürülmeden parametre olarak kullanmayı denedim. Aynı hata.

Çok basit görünüyor. Neyi yanlış yapıyorum?

+1

sadece şimdi aynı sorun vardı @zips – jaxxbo

+0

destekleri çıkarın ve sadece @zips etrafında parantez/parantezler kaldırılır. Sadece jaxxbo diyor ki. –

cevap

7

deneyin:

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

Sorunu çözdüğüm sorun ise, IN dize satırında yalnızca 2100 öğeyi geçebileceğim, bu da dize birleştirme kullanarak sorguyu oluşturduğumda iyi çalışıyor. Ne demek istediğimi: Çalışma Kodu: var query = @ "SELECT * FROM QuestionTags WHERE QuestionID IN (" + idsCsvString + ")"; var results = conn.Query (sorgu) .ToList(); – Marko

+0

Bunu yaptığınızda önerdiğim gibi şu hatayı alıyorum: Gelen tablo veri akışı (TDS) uzaktan yordam çağrısı (RPC) iletişim kuralı akışı yanlış. Bu RPC isteğinde çok fazla parametre sağlandı. Maksimum 2100 – Marko