Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Query lento nell'applicazione .NET ma istantaneo in SQL Server Management Studio

Nella mia esperienza, il solito motivo per cui una query viene eseguita velocemente in SSMS ma lenta da .NET è dovuto alle differenze nel SET della connessione - cose. Quando una connessione viene aperta da SSMS o SqlConnection , un mucchio di SET i comandi vengono emessi automaticamente per configurare l'ambiente di esecuzione. Sfortunatamente SSMS e SqlConnection avere un SET diverso predefiniti.

Una differenza comune è SET ARITHABORT . Prova a emettere SET ARITHABORT ON come primo comando dal tuo codice .NET.

SQL Profiler può essere utilizzato per monitorare quale SET i comandi vengono emessi sia da SSMS che da .NET, quindi puoi trovare altre differenze.

Il codice seguente mostra come emettere un SET comando ma nota che questo codice non è stato testato.

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