Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête SQL lente dans l'application .NET mais instantanée dans SQL Server Management Studio

D'après mon expérience, la raison habituelle pour laquelle une requête s'exécute rapidement dans SSMS mais lentement à partir de .NET est due à des différences dans le SET de la connexion. -tings. Lorsqu'une connexion est ouverte par SSMS ou SqlConnection , un tas de SET des commandes sont émises automatiquement pour configurer l'environnement d'exécution. Malheureusement SSMS et SqlConnection avoir un SET différent par défaut.

Une différence commune est SET ARITHABORT . Essayez d'émettre SET ARITHABORT ON comme première commande de votre code .NET.

SQL Profiler peut être utilisé pour surveiller quel SET les commandes sont émises à la fois par SSMS et .NET afin que vous puissiez trouver d'autres différences.

Le code suivant montre comment émettre un SET commande mais notez que ce code n'a pas été testé.

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