10.3. Executing Simultaneous SQL Statements Asynchronously

Problem

You need to execute multiple SQL statements simultaneously and process results when each statement completes or once all of the statements have completed.

Solution

Use the WaitAny() or the WaitAll() method of the WaitHandle class monitor. Both solutions are shown here.

The first solution creates an array of 10 Command objects that each execute a T-SQL WAITFOR statement that instructs SQL Server to wait for a random number of seconds between 1 and 10. The BeginExecuteNonQuery() method of the Command class is used to asynchronously execute each command in the array. The WaitHandle object for each Command object is retrieved using the AsyncWaitHandle property of the IAsyncResult returned by the BeginExecuteNonQuery() method. Each WaitHandle object is added to an array of WaitHandle objects corresponding to the Command array.

A loop is set up to process each of the 10 commands as they complete. Each iteration of the loop executes the WaitAny() method of the static WaitHandle class—the WaitAny() method takes a WaitHandle array argument of objects to wait to complete. When any command in the array completes, the EndExecuteNonQuery() method of that command is called to complete the command execution. The number of the command in the array and the number of records affected (0 in all cases for this example) are output to the console. Finally, the connection for the command is closed. The loop ends when all Command objects in ...

Get ADO.NET 3.5 Cookbook, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.