Според моя опит обичайната причина, поради която заявката се изпълнява бързо в 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.
}