Beendet die asynchrone Ausführung einer SQL-Anweisung.
Public Function EndExecuteNonQuery(
ByVal asyncResult As IAsyncResult
) As Integer
public int EndExecuteNonQuery(IAsyncResult asyncResult)
asyncResult Das System.IAsyncResult-Objekt, das vom Aufruf der BeginExecuteNonQuery-Methode zurückgegeben wird.
Die Anzahl der betroffenen Zeilen (d.h. dasselbe Verhalten wie bei der ExecuteNonQuery-Methode).
ArgumentException Der asyncResult-Parameter ist Null ("Nothing" in Microsoft Visual Basic).
InvalidOperationException Die EndExecuteNonQuery(IAsyncResult)-Methode wurde für eine einzelne Befehlsausführung mehrmals aufgerufen oder die Methode stimmte nicht mit der Ausführungsmethode überein.
Sie müssen die EndExecuteNonQuery-Methode für jeden BeginExecuteNonQuery-Aufruf einmal aufrufen. Der Aufruf muss erfolgen, nachdem das Ergebnis des BeginExecuteNonQuery-Aufrufs zurückgegeben wurde. ADO.NET ist nicht threadsicher. Sie müssen sicherstellen, dass das Ergebnis des BeginExecuteNonQuery-Aufrufs zurückgegeben wurde. Der System.IAsyncResult-Wert, der an die EndExecuteNonQuery-Methode übergeben wird, muss mit demjenigen übereinstimmen, der vom abgeschlossenen BeginExecuteNonQuery-Aufruf zurückgegeben wurde. Es ist ein Fehler, wenn die EndExecuteNonQuery-Methode aufgerufen wird, um einen Aufruf der BeginExecuteReader-Methode zu beenden, und umgekehrt.
Wenn während der Ausführung des Befehls ein Fehler auftritt, wird beim Aufrufen der EndExecuteNonQuery-Methode eine Ausnahmebedingung ausgegeben.
Es gibt vier Möglichkeiten, auf den Abschluss der Ausführung zu warten:
EndExecuteNonQuery aufrufen Der Aufruf von EndExecuteNonQuery wird blockiert, bis der Befehl ausgeführt wurde. Beispiel:
' Visual Basic Dim cmd As ULCommand = new ULCommand( _ "UPDATE Departments" _ + " SET DepartmentName = 'Engineering'" _ + " WHERE DepartmentID=100", _ conn _ ) Dim res As IAsyncResult res = _ cmd.BeginExecuteNonQuery() ' Perform other work. ' This blocks until the command completes. Dim rowCount As Integer = _ cmd.EndExecuteNonQuery( res ) |
Dies entspricht dem folgenden Code in der Sprache C#:
// C# ULCommand cmd = new ULCommand( "UPDATE Departments" + " SET DepartmentName = 'Engineering'" + " WHERE DepartmentID=100", conn ); IAsyncResult res = cmd.BeginExecuteNonQuery(); // Perform other work. // This blocks until the command completes. int rowCount = cmd.EndExecuteNonQuery( res ); |
Eigenschaft IsCompleted von IAsyncResult abrufen Sie können die Eigenschaft IsCompleted von IAsyncResult abrufen. Beispiel:
' Visual Basic Dim cmd As ULCommand = new ULCommand( _ "UPDATE Departments" _ + " SET DepartmentName = 'Engineering'" _ + " WHERE DepartmentID=100", _ conn _ ) Dim res As IAsyncResult res = _ cmd.BeginExecuteNonQuery() While( !res.IsCompleted ) ' Perform other work. End While ' This blocks until the command completes. Dim rowCount As Integer = _ cmd.EndExecuteNonQuery( res ) |
Dies entspricht dem folgenden Code in der Sprache C#:
// C# ULCommand cmd = new ULCommand( "UPDATE Departments" + " SET DepartmentName = 'Engineering'" + " WHERE DepartmentID=100", conn ); IAsyncResult res = cmd.BeginExecuteNonQuery(); while( !res.IsCompleted ) { // Perform other work. } // This blocks until the command completes. int rowCount = cmd.EndExecuteNonQuery( 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( _ "UPDATE Departments" _ + " SET DepartmentName = 'Engineering'" _ + " WHERE DepartmentID=100", _ conn _ ) Dim res As IAsyncResult res = _ cmd.BeginExecuteNonQuery() ' Perform other work. Dim wh As WaitHandle = res.AsyncWaitHandle wh.WaitOne() ' This does not block because the command is finished. Dim rowCount As Integer = _ cmd.EndExecuteNonQuery( res ) |
Dies entspricht dem folgenden Code in der Sprache C#:
// C# ULCommand cmd = new ULCommand( "UPDATE Departments" + " SET DepartmentName = 'Engineering'" + " WHERE DepartmentID=100", conn ); IAsyncResult res = cmd.BeginExecuteNonQuery(); // perform other work WaitHandle wh = res.AsyncWaitHandle; wh.WaitOne(); // This does not block because the command is finished. int rowCount = cmd.EndExecuteNonQuery( res ); |
Callback-Funktion beim Aufrufen der BeginExecuteNonQuery-Methode angeben Sie können beim Aufrufen der BeginExecuteNonQuery-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 rowCount As Integer = _ cmd.EndExecuteNonQuery( res ) End Sub ' Elsewhere in the code Private Sub DoStuff() Dim cmd As ULCommand = new ULCommand( _ "UPDATE Departments" _ + " SET DepartmentName = 'Engineering'" _ + " WHERE DepartmentID=100", _ conn _ ) Dim res As IAsyncResult = _ cmd.BeginExecuteNonQuery( _ 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. int rowCount = cmd.EndExecuteNonQuery(); } // Elsewhere in the code private void DoStuff() { ULCommand cmd = new ULCommand( "UPDATE Departments" + " SET DepartmentName = 'Engineering'" + " WHERE DepartmentID=100", conn ); IAsyncResult res = cmd.BeginExecuteNonQuery( 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 |