【问题标题】:SQL Statement after adding parameters添加参数后的SQL语句
【发布时间】:2012-11-04 13:16:28
【问题描述】:

参数替换后是否可以看到sql语句?

using(SqlCommand cmdInsert = new SqlCommand("INSERT INTO Table(Value_fkey) VALUES(@ValueKey)", Database.Connection))
{
    cmdInsert.Parameters.AddWithValue("@ValueKey", ValueKey);
    System.Convert.ToInt32(cmdInsert.ExecuteScalar());
}

我希望它记录我的 sql 语句,而不是通过 SQL Server,但我不介意它是在调用语句之前还是之后。

【问题讨论】:

  • 参数并没有真正被“替换”,它们只是被用作参数。您可以循环访问现有参数并随时查看它们的值。
  • 使用分析器查看会发生什么。您将看到一个事件准备语句,而另一个/其他事件使用该准备好的语句,按 ID。没有替代品。
  • 你要找的sql不存在,不会永远存在。这就是使用查询参数的重点。由于此 sql 从未组装,因此您的查询中的 data 被错误解释为代码的可能性为 zero

标签: c# sql parameters


【解决方案1】:

这似乎是最简单的方法:

public void OutputSQLToTextFile(SqlCommand sqlCommand)
{
        string query = sqlCommand.CommandText;
        foreach (SqlParameter p in sqlCommand.Parameters)
        {
            query = query.Replace(p.ParameterName, p.Value.ToString());
        }
        OutputToTextFile(query);
    }

【讨论】:

  • 不幸的是,当使用具有组合名称的参数(例如 @Par@ParAdditional)时,这是错误的。在这种情况下,Replace 方法将替换 "@Par",因此我们可以在第二个参数中添加 [value]Additional。
  • @peterboccia 如果您在替换之前将参数从最长到最短排序怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多