2009-11-03 25 views
6

câu hỏi của tôi là làm thế nào để xử lý ngoại lệ sql trong C#, là có anyway để kiểm tra những loại ngoại lệ sql ném từ lớp truy cập dữ liệu? Ví dụ, nếu db ném một ngoại lệ ràng buộc duy nhất, hoặc ngoại lệ khóa ngoại, có cách nào để bắt nó từ C#? mẫu xử lý ngoại lệ bạn đang sử dụng cho các ngoại lệ db này là gì?Làm cách nào để xử lý các ngoại lệ SQL cụ thể (ví dụ: vi phạm ràng buộc duy nhất) trong C#?

Trả lời

0

Catch SqlException

catch(SqlException ex) 
{ 
    foreach(SqlError error in ex.Errors) 
    { 

    } 
} 
1

bạn có thể kiểm tra nội dung tin nhắn, Số lượng và làm chuyển trường hợp vào nó để biết lỗi ...

try { 
} 
catch (SqlException ex) 
{ 
string str; 
     str = "Source:"+ ex.Source;   
     str += "\n"+ "Number:"+ ex.Number.ToString(); 
     str += "\n"+ "Message:"+ ex.Message; 
     str += "\n"+ "Class:"+ ex.Class.ToString(); 
     str += "\n"+ "Procedure:"+ ex.Procedure.ToString(); 
     str += "\n"+ "Line Number:"+ex.LineNumber.ToString(); 
     str += "\n"+ "Server:"+ ex.Server.ToString(); 

     Console.WriteLine (str, "Database Exception"); 
} 
7

Hãy nhìn vào lớp documentation of the SqlException, đặc biệt Ví dụ, tại số properties: SqlException.Number của nó, nên cho phép bạn xác định loại SqlException (ràng buộc duy nhất, khóa ngoài, ...) nào đã xảy ra.

Bạn có thể sử dụng các ngoại lệ được lọc để bắt lỗi cụ thể. VB.NET:

Try 
    ... 
Catch ex as SqlException When ex.Number = ... 
    ... 
Catch ex as SqlException When ex.Number = ... 
    ... 
End Try 

C# (Phiên bản 6 trở lên):

try 
{ 
    ... 
} 
catch (SqlException ex) when (ex.Number == ...) 
{ 
    ... 
} 
catch (SqlException ex) when (ex.Number == ...) 
{ 
    ... 
} 
1

Nó phụ thuộc vào những ngoại lệ và cơ sở dữ liệu của bạn phụ trợ. Bạn cơ sở dữ liệu sẽ tạo ra một mã lỗi duy nhất cho những thứ cụ thể như ràng buộc, quyền, vv nhưng mã lỗi khác nhau từ DB đến DB. Oracle có một MASSIVE pdf (2000+ trang) liệt kê tất cả các lỗi có thể nó có thể ném và tôi chắc chắn Sqlserver có một cái gì đó tương tự. Quan điểm của tôi là bạn tìm kiếm các mã lỗi cụ thể sau đó bạn cần phải trp chỉ những người trong phần bắt và xử lý chúng khác nhau sau đó vô số các lỗi khác bạn có thể nhận được.

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