Beendet die asynchrone Ausführung einer SQL-Anweisung und gibt das angeforderte ULDataReader-Objekt zurück.
Public Function EndExecuteReader(
ByVal asyncResult As IAsyncResult
) As ULDataReader
public ULDataReader EndExecuteReader(IAsyncResult asyncResult)
asyncResult Das System.IAsyncResult-Objekt, das vom BeginExecuteReader-Aufruf zurückgegeben wurde.
Ein ULDataReader-Objekt, das zum Abrufen der angeforderten Zeilen verwendet werden kann (d.h. dasselbe Verhalten wie bei der ExecuteReader-Methode).
ArgumentException Der asyncResult-Parameter ist Null ("Nothing" in Microsoft Visual Basic).
InvalidOperationException Die EndExecuteReader-Methode wurde für eine einzelne Befehlsausführung mehrmals aufgerufen oder die Methode stimmte nicht mit der Ausführungsmethode überein.
Die EndExecuteReader-Methode muss für jeden Aufruf der BeginExecuteReader-Methode ein Mal aufgerufen werden. Der Aufruf muss erfolgen, nachdem das Ergebnis des BeginExecuteReader-Aufrufs zurückgegeben wurde. ADO.NET ist nicht threadsicher. Sie müssen sicherstellen, dass das Ergebnis der BeginExecuteReader-Methode zurückgegeben wurde. Der System.IAsyncResult-Wert, der an die EndExecuteReader-Methode übergeben wird, muss mit demjenigen übereinstimmen, der vom abgeschlossenen BeginExecuteReader-Aufruf zurückgegeben wurde. Es ist ein Fehler, wenn die EndExecuteReader-Methode aufgerufen wird, um einen BeginExecuteNonQuery-Aufruf zu beenden, und umgekehrt.
Wenn während der Ausführung des Befehls ein Fehler auftritt, wird beim Aufrufen der EndExecuteReader-Methode eine Ausnahmebedingung ausgegeben.
Es gibt vier Möglichkeiten, auf den Abschluss der Ausführung zu warten:
Aufrufen der EndExecuteReader-Methode Das Aufrufen der EndExecuteReader-Methode wird blockiert, bis der Befehl ausgeführt wurde. Beispiel:
' Visual Basic Dim cmd As ULCommand = new ULCommand( _ "SELECT * FROM Departments", conn _ ) Dim res As IAsyncResult res = _ cmd.BeginExecuteReader() ' Perform other work ' This blocks until the command completes. Dim reader As ULDataReader = _ cmd.EndExecuteReader( res ) |
Dies entspricht dem folgenden Code in der Sprache C#:
// C# ULCommand cmd = new ULCommand( "SELECT * FROM Departments", conn ); IAsyncResult res = cmd.BeginExecuteReader(); // Perform other work // This blocks until the command completes ULDataReader reader = cmd.EndExecuteReader( res ); |
Eigenschaft IsCompleted von IAsyncResult abrufen Sie können die Eigenschaft IsCompleted von IAsyncResult abrufen. Beispiel:
' Visual Basic Dim cmd As ULCommand = new ULCommand( _ "SELECT * FROM Departments", conn _ ) Dim res As IAsyncResult res = _ cmd.BeginExecuteReader() While( !res.IsCompleted ) ' Perform other work End While ' This blocks until the command completes. Dim reader As ULDataReader = _ cmd.EndExecuteReader( res ) // C# ULCommand cmd = new ULCommand( "SELECT * FROM Departments", conn ); IAsyncResult res = cmd.BeginExecuteReader(); while( !res.IsCompleted ) { // Perform other work. } // This blocks until the command completes. ULDataReader reader = cmd.EndExecuteReader( res ); |
Eigenschaft IAsyncResult.AsyncWaitHandle verwenden, um ein Synchronisationsobjekt abzurufen Sie können die Eigenschaft IAsyncResult.AsyncWaitHandle verwenden, um ein Synchronisationsobjekt abzurufen und darauf zu warten. Beispiel:
' Visual Basic Dim cmd As ULCommand = new ULCommand( _ "SELECT * FROM Departments", conn _ ) Dim res As IAsyncResult res = _ cmd.BeginExecuteReader() ' Perform other work. Dim wh As WaitHandle = res.AsyncWaitHandle wh.WaitOne() ' This does not block because the command is finished. Dim reader As ULDataReader = _ cmd.EndExecuteReader( res ) |
Dies entspricht dem folgenden Code in der Sprache C#:
// C# ULCommand cmd = new ULCommand( "SELECT * FROM Departments", conn ); IAsyncResult res = cmd.BeginExecuteReader(); // Perform other work. WaitHandle wh = res.AsyncWaitHandle; wh.WaitOne(); // This does not block because the command is finished. ULDataReader reader = cmd.EndExecuteReader( res ); |
Angeben einer Callback-Funktion beim Aufrufen der BeginExecuteReader-Methode Sie können beim Aufrufen der BeginExecuteReader-Methode eine Callback-Funktion angeben. Beispiel:
' Visual Basic Private Sub callbackFunction(ByVal ar As IAsyncResult) Dim cmd As ULCommand = _ CType(ar.AsyncState, ULCommand) ' This won't block since the command has completed. Dim reader As ULDataReader = cmd.EndExecuteReader() End Sub ' Elsewhere in the code Private Sub DoStuff() Dim cmd As ULCommand = new ULCommand( _ "SELECT * FROM Departments", conn _ ) Dim res As IAsyncResult = _ cmd.BeginExecuteReader( _ callbackFunction, cmd _ ) ' Perform other work. The callback function ' is called when the command completes. End Sub |
Dies entspricht dem folgenden Code in der Sprache C#:
// C# private void callbackFunction( IAsyncResult ar ) { ULCommand cmd = (ULCommand) ar.AsyncState; // This won't block since the command has completed. ULDataReader reader = cmd.EndExecuteReader(); } // Elsewhere in the code. private void DoStuff() { ULCommand cmd = new ULCommand( "SELECT * FROM Departments", conn ); IAsyncResult res = cmd.BeginExecuteReader(callbackFunction, cmd); // Perform other work. The callback function // is 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.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |