Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere .NET 2.0 API-Referenz » iAnywhere.Data.SQLAnywhere-Namespace (.NET 2.0) » SACommand-Klasse

 

EndExecuteNonQuery-Methode

Beendet die asynchrone Ausführung einer SQL-Anweisung oder gespeicherten Prozedur.

Syntax
Visual Basic

Public Function EndExecuteNonQuery( _
   ByVal asyncResult As IAsyncResult _
) As Integer
C#

public int EndExecuteNonQuery(
   IAsyncResult asyncResult
);
Parameter
  • asyncResult   Das vom Aufruf von SACommand.BeginExecuteNonQuery zurückgegebene IAsyncResult-Ergebnis.

Rückgabewert

Die Anzahl der betroffenen Zeilen (dasselbe Verhalten wie SACommand.ExecuteNonQuery).

Bemerkungen

EndExecuteNonQuery muss für jeden Aufruf von BeginExecuteNonQuery ein Mal aufgerufen werden. Der Aufruf muss erfolgen, nachdem BeginExecuteNonQuery ausgeführt wurde. ADO.NET ist nicht threadsicher. Sie müssen dafür Sorge tragen, dass BeginExecuteNonQuery abgeschlossen wurde. Das IAsyncResult-Ergebnis, das an EndExecuteNonQuery übergeben wird, muss mit dem des ausgeführten Aufrufs BeginExecuteNonQuery übereinstimmen. Es wird ein Fehler erzeugt, wenn EndExecuteNonQuery aufgerufen wird, um einen Aufruf von BeginExecuteReader zu beenden, und umgekehrt.

Wenn während der Ausführung des Befehls ein Fehler auftritt, wird eine Ausnahmebedingung generiert, wenn EndExecuteNonQuery aufgerufen wird.

Es gibt vier Möglichkeiten, auf den Abschluss der Ausführung zu warten:

(1) Aufruf von EndExecuteNonQuery.

Der Aufruf von EndExecuteNonQuery 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( 
  "UPDATE Departments"
    + " SET DepartmentName = 'Engineering'"
    + " WHERE DepartmentID=100",
  conn );
IAsyncResult res = cmd.BeginExecuteNonQuery();
// perform other work
// this will block until the command completes
int rowCount reader = cmd.EndExecuteNonQuery( 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( 
  "UPDATE Departments"
    + " SET DepartmentName = 'Engineering'"
    + " WHERE DepartmentID=100",
    conn
  );
IAsyncResult res = cmd.BeginExecuteNonQuery();
while( !res.IsCompleted ) {
// do other work
}
// this will not block because the command is finished
int rowCount = cmd.EndExecuteNonQuery( 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( 
  "UPDATE Departments"
    + " SET DepartmentName = 'Engineering'"
    + " WHERE DepartmentID=100",
    conn
  );
IAsyncResult res = cmd.BeginExecuteNonQuery();
// perform other work
WaitHandle wh = res.AsyncWaitHandle;
wh.WaitOne();
// this will not block because the command is finished
int rowCount = cmd.EndExecuteNonQuery( res );

(4) Angabe einer Callback-Funktion beim Aufruf von BeginExecuteNonQuery.

Sie können beim Aufruf von BeginExecuteNonQuery 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
            int rowCount = cmd.EndExecuteNonQuery();
}
// elsewhere in the code
private void DoStuff() 
{
      SAConnection conn = new SAConnection("DSN=SQL Anywhere 11 Demo");
      conn.Open();
            SACommand cmd = new SACommand(
        "UPDATE Departments"
    + " SET DepartmentName = 'Engineering'"
    + " WHERE DepartmentID=100",
    conn
  );
   IAsyncResult res = cmd.BeginExecuteNonQuery( 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.

Siehe auch