Meiner Erfahrung nach ist der übliche Grund, warum eine Abfrage in SSMS schnell, aber in .NET langsam ausgeführt wird, auf Unterschiede im SET
der Verbindung zurückzuführen -dings. Wenn eine Verbindung entweder von SSMS oder SqlConnection
geöffnet wird , ein paar SET
Befehle werden automatisch ausgegeben, um die Ausführungsumgebung einzurichten. Leider SSMS und SqlConnection
haben unterschiedliche SET
Standardwerte.
Ein häufiger Unterschied ist SET ARITHABORT
. Versuchen Sie, SET ARITHABORT ON
auszugeben als erster Befehl aus Ihrem .NET-Code.
SQL Profiler kann verwendet werden, um zu überwachen, welcher SET
-Befehle werden sowohl von SSMS als auch von .NET ausgegeben, sodass Sie weitere Unterschiede feststellen können.
Der folgende Code zeigt, wie ein SET
ausgegeben wird Befehl, aber beachten Sie, dass dieser Code nicht getestet wurde.
using (SqlConnection conn = new SqlConnection("<CONNECTION_STRING>")) {
conn.Open();
using (SqlCommand comm = new SqlCommand("SET ARITHABORT ON", conn)) {
comm.ExecuteNonQuery();
}
// Do your own stuff here but you must use the same connection object
// The SET command applies to the connection. Any other connections will not
// be affected, nor will any new connections opened. If you want this applied
// to every connection, you must do it every time one is opened.
}