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

Xử lý lỗi SQL Server:ngoại lệ và hợp đồng máy khách-cơ sở dữ liệu

Tôi là một con khỉ mã khách hàng xử lý rất nhiều cơ sở dữ liệu. Đây là cách tôi xử lý nó.

Các ngoại lệ (lỗi nâng) xảy ra trong SQL được truyền trở lại trình gọi. Điều này sẽ bao gồm các ràng buộc về số lần giới thiệu, vi phạm chỉ mục duy nhất, các vấn đề nghiêm trọng hơn, v.v. Về cơ bản, bất kỳ điều gì không làm cho hoạt động dữ liệu diễn ra bình thường đều nên được truyền lại.

Người gọi C # phải có điều này:

catch (SQLException sqlEx)

Và sau đó xử lý ngoại lệ khi cần thiết. Họ phải có một trình xử lý SQLException cụ thể. Đây là điều quan trọng.

Tôi thường tránh xa các thông số đầu ra vì tôi coi những thông số đó có liên quan đến dữ liệu đang được vận chuyển chứ không phải bất kỳ thông báo lỗi nào, ngoài ra tôi có thể kiểm tra ngoại lệ cho mã lỗi SQL Server, vì vậy tất cả dữ liệu chúng ta cần đều nằm trong ngoại lệ đó.

Ngoài ra, trong một số trường hợp với SQL Server, chúng tôi có Thủ tục lưu trữ có thể nâng cao "loại ngoại lệ kinh doanh". Trong những trường hợp đó, chúng tôi thêm một số lỗi tùy chỉnh (trên 50000) và tăng lỗi đó trong quy trình được lưu trữ khi cần thiết. Nói chung, chúng tôi cố gắng giữ những điều này ở mức tối thiểu vì nó làm tăng thêm sự phức tạp, nhưng trong một số trường hợp, chúng tôi thấy chúng là cần thiết.

Bây giờ, vì máy khách đang bắt SQLException, họ có thể xem mã lỗi do SQL Server trả về trong ngoại lệ và sau đó thực hiện bất kỳ hành động đặc biệt nào (nếu cần) khi bắt được ngoại lệ và số lỗi là một giá trị nhất định. Điều này cho phép mức xử lý lỗi thứ cấp dựa trên mã lỗi nếu điều đó là bắt buộc đối với các lỗi tùy chỉnh (> 50000).

Điều này cũng cho phép các DBA đưa ra các lỗi tùy chỉnh và yêu cầu mã khách hàng có một cách nhất quán để xử lý chúng. Các DBA sau đó sẽ phải thông báo cho khỉ mã khách hàng lỗi tùy chỉnh là gì để họ có thể chuẩn bị cho chúng.

Tôi thường không sử dụng các mã trả về cho mục đích xử lý lỗi, mặc dù tôi có thể thấy cách chúng có thể được sử dụng, nhưng điều đó có nghĩa là sẽ có nhiều logic hơn trong lớp khỉ mã để xem xét và xử lý mã trả về. Nếu chúng là một vấn đề, tôi muốn có một ngoại lệ trở lại, vì khi đó tôi có thể giải quyết chúng một cách nhất quán. Nếu tôi cũng phải xem mã trả lại, bây giờ có nhiều cách xử lý lỗ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. Cách SET ROWCOUNT hoạt động trong SQL Server

  2. SQL Server LIKE chứa các ký tự trong ngoặc

  3. Chọn kích thước cơ sở dữ liệu SQL Server

  4. Cách tự động thêm ngày 1 năm vào ngày hiện có trong SQL Server

  5. Bảng ẩn trong cơ sở dữ liệu SQL Server?