SqlCommand.BeginExecuteNonQuery-Methode ()
Assembly: System.Data (in system.data.dll)
Rückgabewert
Ein IAsyncResult zum Abfragen von Ergebnissen oder als Warteschleife. Dieser Wert wird auch zum Aufrufen von EndExecuteNonQuery benötigt, das die Anzahl der betroffenen Zeilen zurückgibt.Die BeginExecuteNonQuery-Methode startet die asynchrone Ausführung einer Transact-SQL-Anweisung oder einer gespeicherten Prozedur ohne Zeilenrückgabe, sodass andere Aufgaben gleichzeitig ausgeführt werden können. Wenn die Anweisung abgeschlossen wurde, müssen Entwickler die EndExecuteNonQuery-Methode aufrufen, um den Vorgang zu beenden. Die BeginExecuteNonQuery-Methode gibt zwar sofort ein Ergebnis zurück, doch vor der Ausführung des zugehörigen EndExecuteNonQuery-Methodenaufrufs dürfen keine anderen Aufrufe ausgeführt werden, die eine synchrone bzw. asynchrone Ausführung zu demselben SqlCommand-Objekt starten. Durch Aufrufen von EndExecuteNonQuery bevor der Befehl vollständig ausgeführt wurde, wird das SqlCommand-Objekt blockiert, bis die Ausführung abgeschlossen ist.
Beachten Sie, dass der Befehlstext und die Parameter synchron an den Server übermittelt werden. Wenn ein umfangreicher Befehl oder viele Parameter gesendet werden, blockiert diese Methode eventuell während des Schreibvorgangs. Nach dem Senden des Befehls gibt die Methode sofort ein Ergebnis zurück, ohne die Antwort des Servers abzuwarten. Lesevorgänge erfolgen also asynchron.
Da diese Überladung keine Rückrufprozedur unterstützt, müssen Entwickler entweder über eine Abfrage feststellen, ob der Befehl abgeschlossen ist, oder warten, bis einer oder mehrere Befehle abgeschlossen werden. Im ersteren Fall wird die IsCompleted-Eigenschaft des von der BeginExecuteNonQuery-Methode zurückgegebenen IAsyncResult verwendet; im letzteren Fall die AsyncWaitHandle-Eigenschaft des zurückgegebenen IAsyncResult.
Die folgende Konsolenanwendung erstellt und aktualisiert Daten innerhalb der AdventureWorks-Beispieldatenbank im asynchronen Modus. In diesem Beispiel wird eine WAITFOR-Anweisung in den Befehlstext eingefügt, um einen Prozess mit langer Laufzeit zu emulieren. Normalerweise verlangsamen Sie die Ausführung von Befehlen nicht, aber in diesem Fall wird dadurch das Veranschaulichen asynchronen Verhaltens vereinfacht.
using System.Data.SqlClient; class Class1 { static void Main() { // This is a simple example that demonstrates the usage of the // BeginExecuteNonQuery functionality. // The WAITFOR statement simply adds enough time to prove the // asynchronous nature of the command. string commandText = "UPDATE Production.Product SET ReorderPoint = ReorderPoint + 1 " + "WHERE ReorderPoint Is Not Null;" + "WAITFOR DELAY '0:0:3';" + "UPDATE Production.Product SET ReorderPoint = ReorderPoint - 1 " + "WHERE ReorderPoint Is Not Null"; RunCommandAsynchronously(commandText, GetConnectionString()); Console.WriteLine("Press ENTER to continue."); Console.ReadLine(); } private static void RunCommandAsynchronously( string commandText, string connectionString) { // Given command text and connection string, asynchronously execute // the specified command against the connection. For this example, // the code displays an indicator as it is working, verifying the // asynchronous behavior. using (SqlConnection connection = new SqlConnection(connectionString)) { try { int count = 0; SqlCommand command = new SqlCommand(commandText, connection); connection.Open(); IAsyncResult result = command.BeginExecuteNonQuery(); while (!result.IsCompleted) { Console.WriteLine("Waiting ({0})", count++); // Wait for 1/10 second, so the counter // does not consume all available resources // on the main thread. System.Threading.Thread.Sleep(100); } Console.WriteLine("Command complete. Affected {0} rows.", command.EndExecuteNonQuery(result)); } catch (SqlException ex) { Console.WriteLine("Error ({0}): {1}", ex.Number, ex.Message); } catch (InvalidOperationException ex) { Console.WriteLine("Error: {0}", ex.Message); } catch (Exception ex) { // You might want to pass these errors // back out to the caller. Console.WriteLine("Error: {0}", ex.Message); } } } private static string GetConnectionString() { // To avoid storing the connection string in your code, // you can retrieve it from a configuration file. // If you have not included "Asynchronous Processing=true" in the // connection string, the command is not able // to execute asynchronously. return "Data Source=(local);Integrated Security=SSPI;" + "Initial Catalog=AdventureWorks; Asynchronous Processing=true"; } }
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.