2008-10-07 90 views
4

是否有可能获取OleDbCommand的文本,并且所有参数都用它们的值替换?例如。在下面的代码中我正在寻找一种方法来获取查询文本oledb/ado.net:获取命令的文本,并替换所有参数

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"; 

回答

8

否:你必须自己迭代参数集合,做一个string.Replace()来获得等价的。当您必须使用?语法而不是@parametername语法时,这特别痛苦。

原因是这个完整的字符串是从来没有汇编。参数并发送到服务器并作为数据处理,并且不会包含在字符串中。

一切都一样,我明白你的痛苦。如果它们包含某种.ComposeSQL()方法,您可以调用进行调试,它可能会很好,因为它可能还会生成编译器警告以帮助避免在生产中使用。

3

如果您只需要查看执行了哪些查询并且不需要以编程方式使用它,则可以使用SQL Profiler。