2012-05-01 19 views
5

Escribí el procedimiento almacenado que a veces RAISERROR(). ejecuto a través del marco de la entidad como:Tratamiento de errores de la base de datos en el marco de la entidad

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

procedimiento almacenado:

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

¿Hay alguna oportunidad de obtener información sobre el error?

Respuesta

2

¿Se puede poner esto en prueba/captura con la excepción mostrada? ¿O tal vez podrías probar entrar en modo de depuración?

+0

Por cierto. Fui demasiado rápido ... RAISERROR no devuelve excepción. Solo Sql Server Erorrs ... Entonces, ¿cómo puedo manejar mis errores personalizados? – nosbor

+1

¿Está capturando una instancia de SqlException en su bloque Try/Catch y utilizando sus propiedades Messsage o Errors ?: (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.aspx) –

0

Aquí es cómo manejar esto:

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 

A continuación, en el lado C#/EF:

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

En el nivel excepción de SQL Server 1 al 10 son informativos y no plantea error de vuelta su aplicación.

cambio Nivel entre 11 y 16 para aumentar el error del SP.

Cuestiones relacionadas