Enligt min erfarenhet beror den vanliga anledningen till att en fråga går snabbt i SSMS men långsamt från .NET på skillnader i anslutningens SET
-tings. När en anslutning öppnas av antingen SSMS eller SqlConnection
, ett gäng SET
kommandon utfärdas automatiskt för att ställa in exekveringsmiljön. Tyvärr SSMS och SqlConnection
har olika SET
standardvärden.
En vanlig skillnad är SET ARITHABORT
. Prova att utfärda SET ARITHABORT ON
som det första kommandot från din .NET-kod.
SQL Profiler kan användas för att övervaka vilken SET
kommandon utfärdas av både SSMS och .NET så att du kan hitta andra skillnader.
Följande kod visar hur man utfärdar en SET
kommandot men observera att den här koden inte har testats.
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.
}