oledb / ado.net:获取命令的文本,替换所有参数

时间:2008-10-07 14:59:16

标签: ado.net parameters oledb

是否可以获取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 个答案:

答案 0 :(得分:8)

否:您必须自己遍历参数集合,执行string.Replace()以获取等效项。当您必须使用?语法而不是@parametername语法时,这会特别痛苦。

原因是完整字符串从不组装。参数并发送到服务器并作为数据处理,并且从不包含在字符串中。

同样,我理解你的痛苦。如果他们包含某种.ComposeSQL()方法可以调用进行调试,这可能会很好,这也许会产生编译器警告以帮助避免在生产中使用。

答案 1 :(得分:3)

如果您只需要查看执行了哪些查询而无需以编程方式使用它,则可以使用SQL事件探查器。