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