2011-01-28 20 views
7

Tôi muốn xử lý các vấn đề khác nhau, trong khi thực hiện các thao tác cơ sở dữ liệu, khác nhau.Làm thế nào để biết vấn đề thực tế vì SqlException được ném?

ví dụ: Thao tác có thể không thành công do thông tin xác thực cơ sở dữ liệu sai hoặc do sự cố mạng. Hoặc nó có thể thất bại vì truy vấn không chính xác (nếu giá trị chuỗi đang được chuyển vào cột loại int)

Trong mã C#, chúng tôi chỉ có SqlException có bộ sưu tập SqlErrors. Tuy nhiên có nhiều mức độ nghiêm trọng.

Tôi có thể dễ dàng xác định nguyên nhân của SqlException như thế nào? Làm cách nào tôi có thể xác định ngoại lệ là do sự cố kết nối hoặc lỗi xác thực hoặc do sự cố với truy vấn.

Tôi đang sử dụng SQL Server 2005.

+0

tôi đã cố gắng để đạt được một giải pháp chung mục đích, quá. Mục tiêu của tôi là trình bày nhiều thông báo lỗi thân thiện với người dùng hơn cho người dùng cuối. Tôi không tìm thấy giải pháp làm việc cho đến nay. –

Trả lời

9

Hãy thử một cái gì đó như thế này, điều này sẽ giúp bạn trong việc xử lý các điều kiện khác nhau.

sử dụng một khối try catch như thế này:

try  
{ 
    ... 
    ... 
} 
catch (SqlException ex) 
{ 
    switch (ex.Number) 
    { 
     case 4060: // Invalid Database 
        .... 
        break; 

     case 18456: // Login Failed 

        .... 

        break; 

     case 547: // ForeignKey Violation 

        .... 

        break; 

     case 2627: 
       // Unique Index/ Primary key Violation/ Constriant Violation 

        .... 

        break; 

     case 2601: // Unique Index/Constriant Violation 

        .... 

        break; 

     default: 

        .... 

        break;  

     } 
} 
+2

Từ nơi bạn đã nhận được những con số cụ thể này vì những lý do đã nhận xét? Tôi muốn những con số như vậy cho một vài lý do như mạng failuer vv Hệ thống bảng tin nhắn trong SQL cho hàng ngàn tin nhắn và do đó, đó không phải là khá tiện dụng cho tôi. – Learner

+0

@CSharpLearner: Tôi nhận được thông báo lỗi này từ nhiều nguồn khác nhau như blog và mã cũ trong dự án của tôi. Có thể bạn có thể lấy các mã lỗi này từ cơ sở dữ liệu của mình, hãy thử truy vấn "SELECT * FROM sysmessages" – JPReddy

+0

@CSharpLearner: wow, điều đó thực sự sẽ giúp nhiều người tôi nghĩ rằng – JPReddy

1

SQLException cho thấy nhiều tài sản Class mà nên cung cấp cho bạn mức độ nghiêm trọng.

Thông tin thêm here.

Các vấn đề liên quan