El método BeginExecuteNonQuery inicia el proceso de ejecución asincrónica de una instrucción de Transact-SQL o de un procedimiento almacenado que no devuelve filas, para que otras tareas puedan ejecutarse simultáneamente mientras se ejecuta la instrucción. Cuando termina la instrucción, los desarrolladores deben llamar al método EndExecuteNonQuery para finalizar la operación. El método BeginExecuteNonQuery devuelve un valor inmediatamente, pero hasta que el código ejecute la llamada al método EndExecuteNonQuery correspondiente, no debe ejecutar ninguna otra llamada que comience una ejecución sincrónica o asincrónica con respecto al mismo objeto SqlCommand. Si se llama a EndExecuteNonQuery antes de que finalice la ejecución del comando, el objeto SqlCommand se bloqueará hasta que la ejecución termine.
Observe que el texto del comando y los parámetros se envían al servidor de forma sincrónica. Si se envía un comando de gran tamaño o un gran número de parámetros, este método puede bloquearse durante las operaciones de escritura. Una vez enviado el comando, el método devuelve un valor inmediatamente sin esperar una respuesta del servidor; es decir, las lecturas son asincrónicas.
Dado que esta sobrecarga no admite un procedimiento de devolución de llamada, los desarrolladores deben sondear para determinar si el comando ha finalizado, utilizando la propiedad IsCompleted de IAsyncResult que devuelve el método BeginExecuteNonQuery, o bien, deben esperar a que finalice uno o varios comandos, utilizando la propiedad AsyncWaitHandle de IAsyncResult que se devuelve.