在执行ExecuteNonQuery()之前找出查询文本

本文关键字:查询 文本 执行 ExecuteNonQuery | 更新日期: 2023-09-27 17:53:11

这里是使用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 -这是PostgreSQL相当于OleDbCommand和得到未描述的异常。我能够构建该查询,并通过循环Command找到错误所在。参数和替换命令中的疑问符号。CommandText与参数的值,但我希望有一个内置的方法来获得该查询。

在执行ExecuteNonQuery()之前找出查询文本

没有直接的方法来检查生成的查询,但是您可以使用字符串格式代替命令。

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显示哪个查询是在数据库上触发的