Выполнение запроса SQL во время ожидания асинхронной операции создает исключение - PullRequest
0 голосов
/ 22 октября 2010

Код, который я пишу, копирует данные из одной таблицы в другую.Возможно, запрос может выполняться долго, поэтому я выполняю асинхронный запрос и, ожидая, я делаю подсчет в таблице назначения, чтобы обеспечить обновление статуса.

Запрос, который выполняет подсчетполучает следующее сообщение об исключении ...

Выполнение команды не может быть продолжено из-за незавершенной асинхронной операции, которая уже выполняется.

Итак, я четконе положено.Итак, каковы правила для асинхронных операций 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 Ответ

2 голосов
/ 22 октября 2010

Похоже, вы пытаетесь использовать ту же команду.

Я думаю, что вы хотите заменить

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

на

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

Вы пытаетесьиспользовать тот же оператор, который должен быть заблокирован из-за первого выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...