sql >> Base de Datos >  >> RDS >> Sqlserver

Consulta SQL lenta en la aplicación .NET pero instantánea en SQL Server Management Studio

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