2014-02-06 2 views
0

Я пытаюсь исправить проблему в приложении ASP.NET, которое использует DataContext.ExecuteQuery для выполнения инструкции sql. По ключевому слову:Может ли DataContext.ExecuteQuery обрабатывать все где оператор

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

где «whereClauses» - это список строк. Таким образом, в запрос внедряется функция поиска. Проблема возникает при запуске открытого поиска для строки типа «O'Donnel», которая явно запускает запрос в ошибке. Меня попросили исправить эту проблему. Мой подход заключался в том, чтобы заменить оператор where «{0}» в запросе, а затем передать его как параметр в методе 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.

Вы не можете пройти весь где положение в качестве параметра, так как запрос, как select * from myTable @param не является допустимым SQL, в то время как select * from myTable where myField = @paramявляется действительным SQL.

Итак, в ответ на ваш конкретный вопрос - нет, вы не можете сделать это, передав параметры ExecuteQuery.

Однако почему бы не создать запрос в коде, прежде чем передавать его на ExecuteQuery?

например.

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

 Смежные вопросы

  • Нет связанных вопросов^_^