oledb / ado.net: получить текст команды со всеми параметрами, замененными

StackOverflow https://stackoverflow.com/questions/178857

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top