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