Podle mých zkušeností je obvyklý důvod, proč dotaz běží rychle v SSMS, ale pomalý z .NET, kvůli rozdílům v SET
připojení -tings. Když se otevře připojení pomocí SSMS nebo SqlConnection
, spoustu SET
jsou automaticky vydávány příkazy pro nastavení prostředí pro provádění. Bohužel SSMS a SqlConnection
mít jinou SET
výchozí.
Jeden společný rozdíl je SET ARITHABORT
. Zkuste zadat SET ARITHABORT ON
jako první příkaz z vašeho kódu .NET.
SQL Profiler lze použít ke sledování, který SET
příkazy jsou vydávány jak SSMS, tak .NET, takže můžete najít další rozdíly.
Následující kód ukazuje, jak vydat SET
příkaz, ale všimněte si, že tento kód nebyl testován.
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.
}