sql >> Base de Datos >  >> RDS >> Sqlserver

Llamada asíncrona de un procedimiento almacenado de SQL Server en C#

En tu SqlCommand puede ejecutar comandos de forma asíncrona usando BeginExecuteNonQuery y EndExecuteNonQuery . Este último se bloqueará hasta que esté listo. Sin embargo, esto no informará el progreso del servidor sobre cómo va la copia de seguridad; usaría una barra de progreso de marquesina para ello.

Para evitar el EndExecuteNonQuery de bloquear su interfaz de usuario (dependiendo de cómo lo maneje), necesitará un hilo de fondo. Si usa esto, es mejor que no use BeginXXX EndXXX métodos y hacerlo sincrónicamente en un subproceso de fondo - el BackgroundWorker es mejor para esto.

Para evitar el uso de un hilo de fondo en la interfaz de usuario, en lugar de bloquear en EndXXX deberá registrar una devolución de llamada y manejar el evento resultante (llamar a EndXXX en este controlador de eventos, pero regresará inmediatamente).

Actualización: según un comentario, para llamadas asincrónicas al comando SQL/cosas de conexión, debe especificar tanto en la cadena de conexión:

http://www.connectionstrings.com/sql-server-2008

Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;

O en código usando el generador de cadenas de conexión:

builder.AsynchronousProcessing = true;