En mi experiencia, la razón habitual por la que una consulta se ejecuta rápido en SSMS pero lenta desde .NET se debe a las diferencias en el SET
de la conexión. -tings. Cuando SSMS o SqlConnection
abren una conexión , un montón de SET
los comandos se emiten automáticamente para configurar el entorno de ejecución. Lamentablemente SSMS y SqlConnection
tener diferentes SET
predeterminados.
Una diferencia común es SET ARITHABORT
. Intente ejecutar SET ARITHABORT ON
como el primer comando de su código .NET.
SQL Profiler se puede usar para monitorear qué SET
SSMS y .NET emiten comandos para que pueda encontrar otras diferencias.
El siguiente código demuestra cómo emitir un SET
comando pero tenga en cuenta que este código no ha sido probado.
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.
}