2012-05-01 16 views
5

Napisałem procedurę przechowywaną czasami RAISERROR(). wykonam go przez Entity Framework jak:Obsługa błędów bazy danych w strukturze encji

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

Procedura składowana:

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

Czy jest jakaś szansa, aby uzyskać informacje na temat błędu?

Odpowiedz

2

Czy można to zrobić w trybie prób/catch z wyświetlonym wyjątkiem? A może mógłbyś spróbować przejść do trybu debugowania?

+0

Btw. Byłem zbyt szybki ... RAISERROR nie zwraca wyjątku. Tylko błędy serwera sql ... Jak mogę obsłużyć moje błędy niestandardowe? – nosbor

+1

Czy przechwytujesz wystąpienie wyjątku SqlException w bloku Try/Catch i używasz jego właściwości Messsage lub Errors ?: (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.aspx) –

0

Oto jak ja sobie z tym poradzić:

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 

Następnie na stronie C#/EF:

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

Na poziomie wyjątku serwera sql 1 do 10 są informacyjny i nie podnieść błąd z powrotem do Twoje zgłoszenie.

zmiana poziomu pomiędzy 11 a 16, aby podnieść błąd z SP.