SqlConnection oSqlConn = this.GetConnection(nDatabaseKey); oSqlConn.Open(); SqlCommand oCmd = new SqlCommand("SELECT * FROM Orders", oSqlConn); IAsyncResult oAR = oCmd.BeginExecuteReader(); while (oAR.IsCompleted == false) { // Do something while waiting } SqlDataReader r = oCmd.EndExecuteReader(oAR); oMyConn.Close();Example of callback method...
SqlConnection oSqlConn = this.GetConnection(nDatabaseKey); oSqlConn.Open(); SqlCommand oCmd = new SqlCommand("SELECT * FROM Orders", oSqlConn); AsyncCallback oCallBack = new AsyncCallback(GetResult); oCmd.BeginExecuteReader(oCallBack, oCmd,CommandBehavior.CloseConnection); ... public void GetResult(IAsyncResult result) { SqlCommand oCmd = (SqlCommand)result.AsyncState; SqlDataReader rdr =oCmd.EndExecuteReader(result); // Do something with the reader }Example of the wait model...
SqlConnection oSqlConn = this.GetConnection(nDatabaseKey); oSqlConn.Open(); SqlCommand oCmd1 = new SqlCommand("SELECT * FROM Orders", oMyConn); SqlCommand oCmd2 = new SqlCommand("SELECT * FROM shippers", oMyConn); WaitHandle[] oHandles = new WaitHandle[2]; IAsyncResult oResult1 = oCmd1.BeginExecuteReader(); IAsyncResult oResult2 = oCmd2.BeginExecuteReader(); oHandles[0] = oResult1.AsyncWaitHandle; oHandles[1] = oResult2.AsyncWaitHandle; WaitHandle.WaitAll(oHandles); SqlDataReader oReader1 = oCmd1.EndExecuteReader(oResult1); SqlDataReader oReader2 = oCmd2.EndExecuteReader(oResult2); oMyConn.Close();Note: you cannot use WaitHandles in a Single Threaded Apartment Model (STAThread).