【问题标题】:Find out query text before doing ExecuteNonQuery()在执行 ExecuteNonQuery() 之前找出查询文本
【发布时间】:2016-06-30 13:25:44
【问题描述】:

这是使用 OleDbCommand 和 ExecuteNonQuery 的示例(我从 msdn.microsoft.com 上的手册中获取)。我想查看在执行之前生成的查询。

private static void OleDbCommandPrepare(string connectionString)
{
    using (OleDbConnection connection = new
               OleDbConnection(connectionString))
    {
        connection.Open();

        // Create the Command.
        OleDbCommand command = new OleDbCommand();

        // Set the Connection, CommandText and Parameters.
        command.Connection = connection;
        command.CommandText =
            "INSERT INTO dbo.Region (RegionID, RegionDescription) VALUES (?, ?)";
        command.Parameters.Add("RegionID", OleDbType.Integer, 4);
        command.Parameters.Add("RegionDescription", OleDbType.VarWChar, 50);
        command.Parameters[0].Value = 20;
        command.Parameters[1].Value = "First Region";

        // Call  Prepare and ExecuteNonQuery.
        command.Prepare();

找出这里正在执行的查询

        command.ExecuteNonQuery();

        // Change parameter values and call ExecuteNonQuery.
        command.Parameters[0].Value = 21;
        command.Parameters[1].Value = "SecondRegion";
        command.ExecuteNonQuery();
    }
}

有什么方法可以做到吗?我正在使用 PgSqlCommand - 它是 OleDbCommand 的 PostgreSQL 等价物并且得到未描述的异常。我能够通过循环 Command.Parameters 并用参数值替换 Command.CommandText 中的问题符号来构建该查询并找到错误,但我希望有一个内置方法来获取该查询。

【问题讨论】:

标签: c# postgresql oledbcommand executenonquery


【解决方案1】:

没有直接的方法来检查 Generated query ,但是您可以使用字符串格式而不是命令。

var query= String.Format(
            "INSERT INTO dbo.Region (RegionID, RegionDescription)
              VALUES ({0}, {1})", 20,"First Region" );
command.CommandText = query;## Heading ##

检查查询的其他方法是使用 Profiler,即在 sql server SQL Profiler 显示在数据库上触发了哪个查询。

【讨论】:

  • 这不是很容易被SQL注入吗?
  • @ClodoaldoNeto - 是的,它会导致 sql 注入,但这只是为了检查生成了什么查询......只是检查什么是查询的替代方法
猜你喜欢
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多