2011-02-10 27 views
8

Tôi sử dụng C# và Sql Server 2008 và tôi có một số khối try/catch trong thủ tục lưu trữ CLR của tôi và chúng bị bắt. Đây là những đăng nhập vào một tập tin và họ trả về một lỗi mã và tin nhắn bằng cách sử dụng SqlPipe. Những công việc bị phạt tiền. Bây giờ tôi cần phải làm tương tự khi tôi có một số lỗi chưa được sửa chữa đặc biệt là để có một dấu vết trong tệp nhật ký!Xử lý ngoại lệ toàn cục trong CLR Thủ tục lưu trữ

Tôi đã cố gắng sử dụng Application.ThreadException nhưng lớp này không có sẵn trong thủ tục lưu trữ CLR (WinForms). Tôi có phải sử dụng một khối try/catch nghịch ngợm trong phương thức Sql Procedure của tôi hay có cái gì tốt hơn để làm không?

Cảm ơn.

+1

SQL Server không cho phép bạn chỉ định trình xử lý của riêng bạn cho * ngoại lệ unhandled *. Nếu một ngoại lệ không được xử lý, SQL Server sẽ gửi một thông báo lỗi cho người dùng. –

Trả lời

1

Khi tôi gọi lại, SQL Server sẽ kết xuất các ngoại lệ chưa được xử lý vào tệp nhật ký riêng của mình, ngoài việc trả lại chúng cho người dùng. Bạn có thể muốn nhìn vào đó.

1

Cách tiếp cận sạch sẽ nhất là sử dụng khối try..catch trong phương thức CLR được gọi. Thậm chí tốt hơn là giữ chức năng chính trong một phương thức riêng biệt được gọi bằng phương thức nhập CLR:

[SqlProcedure] 
public static void GetSomething(string value) 
{ 
    try { 
     DoGetSomething(value): 
    } 
    catch (Exception ex) { 
     // error handling 
    } 
} 

private static void DoGetSomething(string value) 
{ 
    // implementation goes here 
} 
Các vấn đề liên quan