Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đăng ký SqlDependency không hoạt động khi sử dụng IsolationLevel.ReadUncom sent trong giao dịch (không liên quan?)

Chúc mừng bạn đã nhận được SqlDependency đang làm việc (Tôi không mỉa mai chút nào, nhiều người đã thất bại trong việc này).

Bây giờ là lúc để đọc Tạo Truy vấn Thông báo chủ đề trên MSDN. Bạn sẽ thấy các điều kiện theo đó các truy vấn hợp lệ cho các thông báo, bao gồm cả yêu cầu sau:

Tôi đã viết về những điều cơ bản về cách làm SqlDependency hoạt động , có thể sẽ làm sáng tỏ một số hiểu lầm. Và, là một nút phụ, vì bạn đang sử dụng Linq, bạn có thể quan tâm đến LinqToCache , cung cấp cầu nối giữa Linq truy vấn và SqlDependency .

Một nhận xét khác:không Start()Stop() SqlDependency của bạn nilly-willy. Bạn sẽ hối hận sớm thôi. Start() phải được gọi chính xác một lần, trong khi khởi động ứng dụng và Stop() chính xác một lần trong quá trình tắt ứng dụng (nói đúng ra là trong quá trình tải và dỡ tên miền ứng dụng).

Bây giờ, về vấn đề của bạn:mức độ cách ly quan trọng là một trong truy vấn được thông báo . Điều đó có nghĩa là, truy vấn mà bạn đính kèm đăng ký, không phải truy vấn mà bạn thực hiện UPDATE (Tôi sẽ không bình luận về sự khôn ngoan của việc CẬP NHẬT dưới các lần đọc bẩn ... hoặc sự khôn ngoan của việc sử dụng đọc bẩn cho bất cứ điều gì ). Theo như tôi có thể nói, mã bạn hiển thị không nên đăng truy vấn dưới read_uncomiled. Sau khi bạn phát hành SET TRANSACTION ISOLATION ... tất cả các giao dịch tiếp theo (ergo tất cả các bản sao kê) trong phiên đó sẽ ở dưới mức cô lập đó. Bạn đóng kết nối (thông qua việc loại bỏ DataContext) và sau đó sử dụng một kết nối khác. Trừ khi ... bạn sử dụng nhóm kết nối. Chào mừng đến với câu lạc bộ của những nạn nhân vô tội :). Thay đổi mức độ cô lập của tổng hợp rò rỉ kết nối qua Close() / Open() ranh giới . Và đó là vấn đề của bạn. Có một số giải pháp dễ dàng:

Và trong khi chúng ta đang nói chuyện, bạn cũng cần đọc phần này: Sử dụng bảng làm hàng đợi .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server câu lệnh tham gia có điều kiện

  2. Tạo một ngày từ tháng và năm với T-SQL

  3. Dấu ngày giờ mặc định của SQL Server?

  4. Không thể kết nối với máy chủ báo cáo 2008 r2

  5. System.AccessViolationException trong .NET 4.0 khi kết nối với Cơ sở dữ liệu SQL