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

+0

에서 브래킷을 제거하고 난 그냥 @zips 주위에 대괄호/괄호를 제거했습니다. 그냥 iike jaxxbo가 말합니다. –

답변

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

Sam 내가 만나는 문제는 문자열 연결을 사용하여 쿼리를 생성 할 때 잘 작동하기 때문에 나는 위의 제한 사항 인 IN 절에 2100 개의 항목 만 전달할 수 있다는 것입니다. 여기 내 뜻은 다음과 같습니다. 작업 코드 : var query = @ "SELECT * FROM QuestionTags Where QuestionID IN ("+ idsCsvString + ")"; var results = conn.Query (query) .ToList(); – Marko

+0

내가 다음과 같은 오류 메시지를 표시하는 방식으로 수행합니다. 들어오는 테이블 형식의 TDS (원격 프로 시저 호출) 프로토콜 스트림이 잘못되었습니다. 이 RPC 요청에 너무 많은 매개 변수가 제공되었습니다. 최대 값은 2100입니다. – Marko