Според моя опит обичайната причина, поради която заявката се изпълнява бързо в SSMS, но бавно от .NET, се дължи на разликите в SET
на връзката -дънки. Когато се отвори връзка чрез SSMS или SqlConnection
, куп SET
командите се издават автоматично за настройка на средата за изпълнение. За съжаление SSMS и SqlConnection
имат различен SET
по подразбиране.
Една обща разлика е SET ARITHABORT
. Опитайте да издадете SET ARITHABORT ON
като първата команда от вашия .NET код.
SQL Profiler може да се използва за наблюдение кой SET
командите се издават както от SSMS, така и от .NET, така че можете да намерите други разлики.
Следният код демонстрира как да издадете SET
команда, но имайте предвид, че този код не е тестван.
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.
}