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

时间:2016-06-30 04:37:01

标签: c# postgresql oledbcommand executenonquery

以下是使用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.Parameters并使用paremeter的值替换Command.CommandText中的问题符号来查找错误是什么,但我希望有一个内置方法来获取该查询。

1 个答案:

答案 0 :(得分:1)

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

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