在等待异步操作时执行SQL查询会生成异常

时间:2010-10-21 23:29:46

标签: sql exception asynchronous

我正在编写的代码将数据从一个表复制到另一个表。查询可能会运行很长时间,所以我正在执行异步查询,而在等待我正在对目标表进行计数以提供状态更新。

执行计数的查询是获取以下异常消息...

由于正在进行的待处理异步操作,命令执行无法继续。

很清楚我正在做的事情是不允许的。那么异步SQL操作的规则是什么?是否有另一种方法来获取待处理操作的状态?

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder( _connectionString );
builder.AsynchronousProcessing = true;

using( SqlConnection connection = new SqlConnection( builder.ConnectionString ) )
{
    connection.Open();

    SqlCommand command = new SqlCommand();
    command.Connection = connection;
    command.CommandType = System.Data.CommandType.Text;
    command.CommandText = "INSERT INTO DestTable SELECT * FROM SourceTable";

    IAsyncResult result = command.BeginExecuteNonQuery();

    using( SqlConnection statusConnection = new SqlConnection( _connectionString ) )
    {
        while( !result.IsCompleted )
        {
            SqlCommand statusCommand = new SqlCommand();
            statusCommand.Connection = statusConnection;
            statusCommand.CommandType = System.Data.CommandType.Text;
            statusCommand.CommandText = "SELECT COUNT(*) FROM DestTable";

            int currentRowCount = (int)command.ExecuteScalar();

            Thread.Sleep( 500 );
        }

        command.EndExecuteNonQuery( result );
    }
}

1 个答案:

答案 0 :(得分:2)

看起来您正在尝试使用相同的命令。

我认为您要替换

int currentRowCount = (int)command.ExecuteScalar();

int currentRowCount = (int)statusCommand.ExecuteScalar();

您正在尝试使用相同的Statement,由于首次执行,该语句应被阻止。