Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Langganan SqlDependency tidak berfungsi saat menggunakan IsolationLevel.ReadUncommitted dalam Transaksi (tidak terkait?)

Selamat mendapatkan SqlDependency bekerja (saya sama sekali tidak menyindir, banyak yang gagal dalam hal ini).

Sekarang saatnya membaca Membuat Kueri untuk Pemberitahuan topik di MSDN. Anda akan melihat kondisi di mana kueri valid untuk notifikasi, termasuk persyaratan ini:

Saya menulis tentang dasar-dasar cara SqlDependency bekerja , mungkin akan menjernihkan beberapa kesalahpahaman. Dan, sebagai simpul samping, karena Anda menggunakan Linq, Anda mungkin tertarik dengan LinqToCache , yang menyediakan jembatan antara Linq kueri dan SqlDependency .

Komentar lain:jangan Start() dan Stop() SqlDependency . Anda mau tak mau. Anda akan segera menyesalinya. Start() seharusnya dipanggil tepat sekali, selama startup aplikasi, dan Stop() tepat sekali selama penonaktifan aplikasi (tepatnya, adalah selama pemuatan dan pembongkaran domain aplikasi).

Sekarang, tentang masalah Anda:tingkat isolasi yang penting adalah salah satu dari kueri yang diberi tahu . Artinya, kueri yang Anda lampirkan langganan, bukan kueri tempat Anda melakukan UPDATE (Saya tidak akan mengomentari kebijaksanaan melakukan UPDATE di bawah pembacaan kotor ... atau kebijaksanaan menggunakan pembacaan kotor untuk apa pun ). Sejauh yang saya tahu, kode yang Anda tampilkan tidak boleh memposting kueri di bawah read_uncommitted. Setelah Anda mengeluarkan SET TRANSACTION ISOLATION ... semua transaksi berikutnya (ergo semua pernyataan) di sesi itu akan berada di bawah tingkat isolasi itu. Anda menutup koneksi (melalui pembuangan DataContext) dan kemudian menggunakan koneksi yang berbeda. Kecuali ... Anda menggunakan kumpulan koneksi. Selamat datang di klub korban tak berdosa :). Kebocoran penyatuan koneksi mengubah tingkat isolasi di seluruh Close() /Open() batas . Dan itu adalah masalah Anda. Ada beberapa solusi mudah:

Dan sementara kita berbicara, Anda perlu membaca ini juga: Menggunakan Tabel sebagai Antrian .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Delphi - Baik BOF atau EOF Benar, atau catatan saat ini telah dihapus

  2. Bagaimana cara mendapatkan Waktu dari format DateTime dalam SQL?

  3. Pengelompokan SQL - Hanya tampilkan 5 komentar per posting

  4. Pagination di SQL Server menggunakan OFFSET/FETCH

  5. Mengapa mengeksekusi prosedur tersimpan lebih cepat daripada kueri SQL dari skrip?