2014-02-06 6 views
0

SQL 문을 실행하기 위해 DataContext.ExecuteQuery를 사용하는 ASP.NET 응용 프로그램에서 문제를 해결하려고합니다. 이 부분은 다음과 같습니다.DataContext.ExecuteQuery가 전체 where 문을 처리 할 수 ​​있습니까

LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId WHERE " + string.Join(" AND ", whereClauses) + @" 

여기서 "whereClauses"는 문자열 목록입니다. 이렇게하면 검색 기능이 쿼리에 구현됩니다. 문제는 분명히 쿼리에 오류가 발생하는 "O'Donnel"과 같은 문자열에 대해 열린 검색이 실행될 때 나타납니다. 이 문제를 해결하도록 요청 받았습니다. 내 접근 방식은 쿼리에서 "{0}"을 Where 문으로 대체 한 다음 ExecuteQuery 메서드의 매개 변수로 전달하는 것이 었습니다. 내가 달성 한 것은 :

LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId {0} 

var where = "WHERE 1=1"; 
_db.ExecuteQuery<AccountModel>(query, where) 

하지만 작동하지 않습니까? 그것은 모두를위한 단지 매개 변수 부분은 괜찮 어디 전체를 교체하는 경우 :

LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId WHERE 1={0} 

var where = "1"; 
_db.ExecuteQuery<AccountModel>(query, where) 

내 질문 - 동적으로 DataContext.ExecuteQuery 방법에 어디 문 전체를 주입하는 것이 가능하다, 아니면 특정 매개 변수를 전달할 수 있습니다 이 방법 만 사용 하시겠습니까?

답변

0

여기는 help page for the ExecuteQuery method입니다.

당신은 통과 할 수없는 전체 곳 매개 변수로 절 유효한 SQL입니다 select * from myTable where myField = @param 반면 select * from myTable @param 같은 쿼리가 유효한 SQL하지 않기 때문에.

귀하의 특정 질문에 대한 답변으로 - 아니요, 매개 변수를 ExecuteQuery으로 전달하여이 작업을 수행 할 수 없습니다.

그러나 ExecuteQuery으로 전달하기 전에 코드에서 쿼리를 작성하지 않으시겠습니까?

예컨대

var query = "select * from myTable where 1=1" + string.Join(" AND ", whereClauses); 
var result = _db.ExecuteQuery<AccountModel>(query);