oledb / ado.net: получить текст команды со всеми параметрами, замененными - PullRequest
4 голосов
/ 07 октября 2008

Можно ли получить текст 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";

Ответы [ 2 ]

8 голосов
/ 07 октября 2008

Нет: вам придется самим перебирать набор параметров, выполняя string.Replace (), чтобы получить эквивалент. Это особенно болезненно, когда приходится использовать синтаксис ? вместо синтаксиса @parametername.

Причина этого в том, что полная строка никогда не собирается. Параметры и отправляются на сервер и обрабатываются как данные, и никогда не включаются в строку.

Все таки я, например, понимаю вашу боль. Было бы неплохо, если бы они включали какой-то .ComposeSQL() метод, который вы могли бы вызвать для целей отладки , который, возможно, также выдает предупреждение компилятора, чтобы избежать использования в работе.

3 голосов
/ 07 октября 2008

Если вам просто нужно посмотреть, какой запрос был выполнен и вам не нужно работать с ним программно, вы можете использовать SQL Profiler.

...