代码之家  ›  专栏  ›  技术社区  ›  xsl Fredrik Hedblad

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

  •  4
  • xsl Fredrik Hedblad  · 技术社区  · 16 年前

    是否可以获取 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 年前
        1
  •  8
  •   Joel Coehoorn    8 年前

    否:必须自己迭代参数集合,并执行string.replace()以获取等效项。当你不得不使用 ? 语法而不是 @parametername 语法。

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

    尽管如此,我还是理解你的痛苦。如果他们包括一些 .ComposeSQL() 您可以调用的方法 用于调试 可能还会生成一个编译器警告,以帮助避免在生产中使用。

        2
  •  3
  •   StingyJack    16 年前

    如果您只需要查看执行了什么查询,而不需要以编程方式处理它,那么可以使用SQL事件探查器。