Um eine Prozedur die evtl etwas länger dauert, aufrufen zu können, biete das .NET ab v2.0 den „BeginExecuteNonQuery()“ Aufruf,
dieser ruft das SQL Command im Gegensatz zu „ExecuteNonQuery()“ asynchron auf.
Wichtig ist hier bloß zu wissen, dass „BeginExecuteNonQuery()“ zwar einen Aufruf gegen die Datenbank simuliert, der auch im Profiler zu sehen ist, aber das Command nicht abschließt, sodass im Profiler zwar start / completed zu sehen ist, aber die Ausführung nicht wirklcih statt findet.
Wichtig ist hier danach auch noch einen „EndExecuteNonQuery()“ auszuführen. Denn erst mit diesem wird die Prozedur oder der SQL-Befehl wirklich ausgeführt.
Wichtig ist an die dieser Stelle auch noch dem Connection String noch das "Asynchronous Processing=true;" mitzugeben.
//Execute a NonQuery async
this.connectionString = this.connectionString + "Asynchronous Processing=true;";
using (SqlConnection connection = this.OpenConnection())
{
SqlCommand cmd = new SqlCommand(sql, connection);
IAsyncResult result = cmd.BeginExecuteNonQuery();
cmd.EndExecuteNonQuery(result);
}
Siehe auch http://msdn.microsoft.com/de-de/library/ca56w9se(VS.80).aspx
Keine Kommentare:
Kommentar veröffentlichen