Efter min erfaring er den sædvanlige årsag til, at en forespørgsel kører hurtigt i SSMS, men langsomt fra .NET, på grund af forskelle i forbindelsens SET
-tings. Når en forbindelse åbnes af enten SSMS eller SqlConnection
, en masse SET
kommandoer udsendes automatisk for at opsætte eksekveringsmiljøet. Desværre SSMS og SqlConnection
har forskellige SET
standardindstillinger.
En almindelig forskel er SET ARITHABORT
. Prøv at udstede SET ARITHABORT ON
som den første kommando fra din .NET-kode.
SQL Profiler kan bruges til at overvåge hvilken SET
kommandoer udstedes af både SSMS og .NET, så du kan finde andre forskelle.
Følgende kode viser, hvordan man udsteder et SET
kommando, men bemærk, at denne kode ikke er blevet testet.
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.
}