2012-05-01 15 views
5

時々ストアード・プロシージャー・ウィジットを書きましたRAISERROR()。 私のようなエンティティフレームワークを通してそれを実行します。エンティティ・フレームワークのデータベース・エラー処理

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

ストアドプロシージャ:

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

は、エラーに関する情報を取得する任意の機会はありますか?

答えて

2

例外が表示された状態でこれをtry/catchに入れることはできますか?または、デバッグモードに入ることができますか?ここで

+0

Btw。私は速すぎた... RAISERRORは例外を返さない。 Sql Server Erorrsのみ...どうすればカスタムエラーを処理できますか? – nosbor

+1

Try/CatchブロックでSqlExceptionのインスタンスをキャッチし、そのMesssageまたはErrorsプロパティを使用していますか?(http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.aspx ) –

0

は、私がこれを処理する方法である:

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 

そして、C#/ EF側:

SQL Serverの例外レベル1では
public string CallMyStoredProcedure(string input) 
{ 
    var outputParameter = new ObjectParameter("output", typeof(string)); 
    EntityContext.MyStoredProcedure(input, outputParameter); 
    return (string)outputParameter.Value; 
} 
3

10に情報提供され、バックにエラーは発生しません。あなたの申請。

レベルを11から16に変更して、SPからのエラーを発生させます。