2012-05-01 5 views
5

Tôi đã viết phù thủy thủ tục được lưu trữ đôi khi RAISERROR(). tôi thực hiện nó thông qua các khuôn khổ thực thể như:Xử lý lỗi cơ sở dữ liệu trong khung tổ chức

using(MyModelEntities conn = new MyModelEntities()) { 
    conn.MyStoredProcedure(input_p, output_p); 
} 

Thủ tục lưu trữ:

create procedure dbo.MyStoredProcedure(
    @input nvarchar(255), 
    @output int out 
) 
as 
begin 
    ... 
     RAISERROR (N'My Exception....', 10, 1); 
    ... 
end 
go 

Có cơ hội để có được thông tin về lỗi?

Trả lời

2

Điều này có thể được đưa vào thử/bắt với ngoại lệ được hiển thị không? Hoặc có thể bạn có thể thử đi vào chế độ gỡ lỗi?

+0

Btw. Tôi đã quá nhanh ... RAISERROR không trở lại ngoại lệ. Chỉ Sql Server Erorrs ... Vậy làm cách nào tôi có thể xử lý các lỗi Custom của mình? – nosbor

+1

Bạn có đang bắt một trường hợp của SqlException trong khối try/catch và sử dụng các thuộc tính Messsage hoặc Errors của nó không ?: (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.aspx) –

0

Dưới đây là cách tôi xử lý này:

create procedure dbo.MyStoredProcedure(
    @input nvarchar(255), 
    @output text out 
) 
as 
begin 
    ... 
     SELECT @message = convert(varchar, getdate(), 108) + ': My Exception....' 
     SET @output = CAST(@message AS text) -- send message to c#/.net 
     RAISERROR(@message,0,1) WITH NOWAIT -- send message to SQL Server Management Studio 
    ... 
end 
go 

Sau đó, ở phía bên C#/EF:

public string CallMyStoredProcedure(string input) 
{ 
    var outputParameter = new ObjectParameter("output", typeof(string)); 
    EntityContext.MyStoredProcedure(input, outputParameter); 
    return (string)outputParameter.Value; 
} 
3

trong SQL Server mức ngoại lệ 1-10 là cung cấp thông tin và không làm tăng lỗi trở lại ứng dụng của bạn.

thay đổi Cấp độ từ 11 đến 16 để tăng lỗi từ SP.