Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Chamada assíncrona de um procedimento armazenado do SQL Server em C#


Em seu SqlCommand você pode executar comandos de forma assíncrona usando BeginExecuteNonQuery e EndExecuteNonQuery . O último irá bloquear até que seja feito. No entanto, isso não relatará o progresso do servidor sobre como o backup está indo - eu usaria uma barra de progresso de letreiro para isso.

Para evitar o EndExecuteNonQuery de bloquear sua interface do usuário (dependendo de como você lida com isso), você precisará de um thread em segundo plano. Se você usar isso, também não poderá usar BeginXXX EndXXX métodos e fazê-lo de forma síncrona em um thread em segundo plano - o BackgroundWorker é melhor para isso.

Para evitar o uso de um thread em segundo plano na interface do usuário, em vez de bloquear em EndXXX você precisará registrar um retorno de chamada e manipular o evento resultante (chamando EndXXX neste manipulador de eventos, mas ele retornará imediatamente).

Atualização: conforme um comentário, para chamadas assíncronas no comando/conexão SQL, você precisa especificar tanto na string de conexão:

http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;

Ou no código usando o construtor de string de conexão:
builder.AsynchronousProcessing = true;