Асинхронные вызовы через внешний SQL Server - PullRequest
1 голос
/ 10 марта 2011

Как выполнять асинхронные вызовы через внешние C# ADO.Net ?. Как выполнять запросы асинхронно, BeginExecuteQuery ??.

У вас есть пример для запуска ...

У меня есть хранимая процедура, которая выполняет несколько операторов вставки, значения выбираются из таблицы, так как они независимы, TABLE_A, TABLE_B, я хотел бы выполнить ...

EXEC ('SELECT * FROM .. INTO TABLE_A')

and 

EXEC ('SELECT * FROM .. INTO TABLE_B')

1 Ответ

0 голосов
/ 12 марта 2011

Если я понимаю, что вы хотите сделать правильно, то да, вы можете выполнять асинхронные вызовы для 3 команд: ExecuteReader, ExecuteNonQuery и ExecuteXmlReader. Асинхронные версии имеют начальную / конечную часть, например BeginExecuteReader, EndExecuteReader и будет работать для того, что вы после. У вас есть несколько вариантов того, как обрабатывать возврат для этих команд.

Таким образом, вы можете запустить несколько запросов, например, с помощью sqlcommand.BeginExecuteReader, а затем у вас есть несколько вариантов того, как обработать / узнать, когда он завершится при выдаче sqlcommand.EndExecuteReader. Краткий обзор опций с некоторыми описаниями:

  1. Асинхронный опрос - в основном отправка команды sql, а затем повторная проверка свойства IsCompleted объекта SqlAsyncResult до его возврата.
  2. Асинхронный обратный вызов - вы предоставляете подпрограмму обратного вызова в качестве параметра вместе с командой sql этим методом, например, onSqlQueryComplete (вроде как обычная обработка событий), и она вызывается, когда завершается.
  3. Асинхронное ожидание - это используется, если вы хотите ждать и отслеживать процесс / прогресс вызовов SQL.

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

command = (Build all sql command stuff)
AsyncCallback callback = new AsyncCallback(HandleSqlCallback);
command.BeginExecuteReader(callback, command);

command.BeginExecuteReader()

method HandleSqlCallback(IAsyncResult result) {
do stuff when sql done
command.EndExecuteReader(result)
}

У Microsoft есть гораздо лучшие и более полные примеры, чем этот, но это дает вам общее представление о формате. Ссылка MSDN для SqlCommand.BeginExecuteReader Method

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