Beendet die asynchrone Ausführung einer SQL-Anweisung oder gespeicherten Prozedur und gibt den angeforderten SADataReader zurück.
Visual Basic Public Function EndExecuteReader( _ ByVal asyncResult As IAsyncResult _ ) As SADataReader
C# public SADataReader EndExecuteReader( IAsyncResult asyncResult );
asyncResult Das vom Aufruf von SACommand.BeginExecuteReader zurückgegebene IAsyncResult-Ergebnis.
Ein SADataReader-Objekt, das für die Abfrage der angeforderten Zeilen verwendet werden kann (dasselbe Verhalten wie SACommand.ExecuteReader)
EndExecuteReader muss für jeden Aufruf von BeginExecuteReader ein Mal aufgerufen werden. Der Aufruf muss erfolgen, nachdem BeginExecuteReader ausgeführt wurde. ADO.NET ist nicht threadsicher. Sie müssen dafür Sorge tragen, dass BeginExecuteReader abgeschlossen wurde. Das IAsyncResult-Ergebnis, das an EndExecuteReader übergeben wurde, muss mit dem des ausgeführten Aufrufs BeginExecuteReader übereinstimmen. Es wird ein Fehler erzeugt, wenn EndExecuteReader aufgerufen wird, um einen Aufruf von BeginExecuteNonQuery zu beenden, und umgekehrt.
Wenn während der Ausführung des Befehls ein Fehler auftritt, wird eine Ausnahmebedingung generiert, wenn EndExecuteReader aufgerufen wird.
Es gibt vier Möglichkeiten, auf den Abschluss der Ausführung zu warten:
(1) Aufruf von EndExecuteReader.
Der Aufruf von EndExecuteReader wird blockiert, bis der Befehl ausgeführt wurde. Zum Beispiel:
SAConnection conn = new SAConnection("DSN=SQL Anywhere 11 Demo"); conn.Open(); SACommand cmd = new SACommand( "SELECT * FROM Departments", conn ); IAsyncResult res = cmd.BeginExecuteReader(); // perform other work // this will block until the command completes SADataReader reader = cmd.EndExecuteReader( res ); |
(2) Abruf der Eigenschaft IsCompleted von IAsyncResult.
Sie können die Eigenschaft IsCompleted von IAsyncResult abrufen. Zum Beispiel:
SAConnection conn = new SAConnection("DSN=SQL Anywhere 11 Demo"); conn.Open(); SACommand cmd = new SACommand( "SELECT * FROM Departments", conn ); IAsyncResult res = cmd.BeginExecuteReader(); while( !res.IsCompleted ) { // do other work } // this will not block because the command is finished SADataReader reader = cmd.EndExecuteReader( res ); |
(3) Verwendung der Eigenschaft IAsyncResult.AsyncWaitHandle, um ein Synchronisationsobjekt zu erhalten.
Sie können die Eigenschaft IAsyncResult.AsyncWaitHandle verwenden, um ein Synchronisationsobjekt abzurufen und darauf zu warten. Zum Beispiel:
SAConnection conn = new SAConnection("DSN=SQL Anywhere 11 Demo"); conn.Open(); SACommand cmd = new SACommand( "SELECT * FROM Departments", conn ); IAsyncResult res = cmd.BeginExecuteReader(); // perform other work WaitHandle wh = res.AsyncWaitHandle; wh.WaitOne(); // this will not block because the command is finished SADataReader reader = cmd.EndExecuteReader( res ); |
(4) Angabe einer Callback-Funktion beim Aufruf von BeginExecuteReader.
Sie können beim Aufruf von BeginExecuteReader eine Callback-Funktion angeben. Zum Beispiel:
private void callbackFunction( IAsyncResult ar ) { SACommand cmd = (SACommand) ar.AsyncState; // this won’t block since the command has completed SADataReader reader = cmd.EndExecuteReader(); } // elsewhere in the code private void DoStuff() { SAConnection conn = new SAConnection("DSN=SQL Anywhere 11 Demo"); conn.Open(); SACommand cmd = new SACommand( "SELECT * FROM Departments", conn ); IAsyncResult res = cmd.BeginExecuteReader( callbackFunction, cmd ); // perform other work. The callback function will be // called when the command completes } |
Die Callback-Funktion wird in einem separaten Thread ausgeführt, sodass die üblichen Warnungen bezüglich der Aktualisierung der Benutzeroberfläche in einem Programm mit mehreren Threads gelten.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |