oledb / ado.net: получить текст команды со всеми параметрами, замененными
-
05-07-2019 - |
Вопрос
Можно ли получить текст OleDbCommand
со всеми параметрами, замененными их значениями? Например. в приведенном ниже коде я ищу способ получить текст запроса
SELECT * FROM my_table WHERE c1 = 'hello' and c2 = 'world'
после того, как я закончил присваивать параметры.
var query = "SELECT * FROM my_table WHERE c1 = ? and c2 = ?";
var cmd = new OleDbCommand(query, connection);
cmd.Parameters.Add("@p1", OleDbType.WChar).Value = "hello";
cmd.Parameters.Add("@p2", OleDbType.WChar).Value = "world";
Решение
Нет: вам нужно самим перебирать коллекцию параметров, выполняя string.Replace (), чтобы получить эквивалент. Это особенно болезненно, когда нужно использовать синтаксис ?
, а не синтаксис @parametername
.
Причина этого в том, что полная строка никогда не собирается. Параметры и отправляются на сервер и обрабатываются как данные, и никогда не включаются в строку.
Все таки я, например, понимаю твою боль. Было бы неплохо, если бы они включали какой-то метод .ComposeSQL ()
, который вы могли бы вызывать для целей отладки , что, возможно, также выдает предупреждение компилятора, чтобы избежать использования в производственной среде. . р>
Другие советы
Если вам просто нужно посмотреть, какой запрос был выполнен и вам не нужно работать с ним программно, вы можете использовать SQL Profiler.