Dalam pengalaman saya, alasan umum mengapa kueri berjalan cepat di SSMS tetapi lambat dari .NET adalah karena perbedaan SET
koneksi -tings. Saat koneksi dibuka oleh SSMS atau SqlConnection
, sekelompok SET
perintah secara otomatis dikeluarkan untuk mengatur lingkungan eksekusi. Sayangnya SSMS dan SqlConnection
memiliki SET
yang berbeda default.
Satu perbedaan umum adalah SET ARITHABORT
. Coba keluarkan SET ARITHABORT ON
sebagai perintah pertama dari kode .NET Anda.
SQL Profiler dapat digunakan untuk memantau SET
perintah dikeluarkan oleh SSMS dan .NET sehingga Anda dapat menemukan perbedaan lainnya.
Kode berikut menunjukkan cara mengeluarkan SET
perintah tetapi perhatikan bahwa kode ini belum diuji.
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.
}