In mijn ervaring is de gebruikelijke reden waarom een query snel wordt uitgevoerd in SSMS, maar traag vanuit .NET, te wijten aan verschillen in de SET
van de verbinding. -dingen. Wanneer een verbinding wordt geopend door SSMS of SqlConnection
, een heleboel SET
opdrachten worden automatisch gegeven om de uitvoeringsomgeving in te stellen. Helaas SSMS en SqlConnection
hebben verschillende SET
standaardinstellingen.
Een veelvoorkomend verschil is SET ARITHABORT
. Probeer SET ARITHABORT ON
als het eerste commando van je .NET-code.
SQL Profiler kan worden gebruikt om te controleren welke SET
commando's worden gegeven door zowel SSMS als .NET, zodat je andere verschillen kunt vinden.
De volgende code laat zien hoe u een SET
. uitgeeft commando, maar merk op dat deze code niet is getest.
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.
}