Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Abfrage langsam in .NET-Anwendung, aber sofort in SQL Server Management Studio

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.
}