2015-08-13 2 views
0

С помощью следующего кода:Есть ли способ получить полный текст команды NpgsqlCommand?

string strCommand = "SELECT * FROM \"MyDataBase\".\"vwUsers\" " 
strCommand += "WHERE name LIKE '%' || :name || '%' "; 
strCommand += "ORDER BY name ASC LIMIT :page_limit OFFSET :row_offset"; 

NpgsqlCommand cCommand = new NpgsqlCommand(strCommand); 

cCommand.Parameters.Add(new NpgsqlParameter("name", NpgsqlDbType.Text)); 
cCommand.Parameters[0].Value = strName; 
cCommand.Parameters.Add(new NpgsqlParameter("page_limit", NpgsqlDbType.Integer)); 
cCommand.Parameters[1].Value = nPageAmount; 
cCommand.Parameters.Add(new NpgsqlParameter("row_offset", NpgsqlDbType.Integer)); 
cCommand.Parameters[2].Value = nRowOffset; 

Есть ли способ, чтобы получить полный текст командной строки со всеми параметрами, включенными в него?

ответ

2

Nope. Причина этого в том, что поскольку параметры Npgsql 3.0 не просто заменяются в строке; Npgsql фактически отправляет ваш SQL с помощью заполнителей параметров и передает параметры в отдельном сообщении и в двоичном кодировании. Другими словами, нет смысла везде, где SQL-запрос доступен в виде текста с параметрами.

(Примечание: в Npgsql 2.2 привязка параметров на стороне клиента была выполнена для незаготовленных сообщений, поэтому это было возможно в теории).

+0

Это позор. Иногда я получаю параноик о том, заменяются ли параметры, как ожидалось. –

+0

Возможно, имеет смысл добавить функцию трассировки в Npgsql, в которой регистрируются операторы SQL вместе с ToString их параметров, но на данный момент этого не существует. –

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