4

是否可以获得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";
4

2 回答 2

8

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

这样做的原因是整个字符串从未组装过。参数并被发送到服务器并被视为数据,并且永远不会包含在字符串中。

尽管如此,我理解你的痛苦。如果它们包含某种.ComposeSQL()可以用于调试目的的方法会很好,这可能还会产生编译器警告以帮助避免在生产中使用。

于 2008-10-07T15:04:13.180 回答
3

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

于 2008-10-07T15:07:10.273 回答