2016-07-29 17 views
2

私はサービスからデータベースに新しいレコードを挿入したり、既存のレコードを更新するストアドプロシージャを持っています。 しかし、挿入/更新が成功するとtrueを表示する必要があり、失敗した場合は応答としてfalseを表示する必要があります。私は成功したトランザクションが意味している場合、結果はなることMSDNのサイトで読んで以来 エンティティ・フレームワークのストアド・プロシージャから戻り値をフェッチする方法は?

EF

result = database.usp_sp_name(parameters); 
if (result==0) 
    return true; 
else 
    return false; 
から私のストアドプロシージャの呼び出しで

ので、私は上記のコードを試してみました0しかし、たとえその挿入レコードまたはレコードを更新します、私は虚偽の応答を得ています。

+0

これはうまくいくはずです。 Management StudioからそのSPを呼び出すと、0が返されます。 Entity FrameworkでSPのコードをデバッグすることができます。そこでは、どのように呼び出され、どのような結果が返されるかを確認できます。それが機能していない場合は、少なくとも、何が失敗しているのかを見つけることができます。 – Andrew

+0

格納されたprocは、procの最後に値を返しますか? – grambo25

+0

私はストアドプロシージャのデフォルトであるreturn_Valueパラメータを意味しました – user3331421

答えて

0

あなたのコードでは、storedprocの結果を保持するboolを作成し、storedprocの結果が1の場合はtrueを返します。それ以外の場合はfalseを返します。

bool result = _entites.StoredProc(parameters); 
return (result == 1) ? true: false; 

しかし、あなたのストアドプロシージャ にあなたはこの

CREATE PROCEDURE [dbo].[StoredProc] 
    @parameter 
AS 
BEGIN 
    DECLARE @result int 
    DECLARE @param nvarchar(255) 
    SET @param = @parameter 

    INSERT INTO (field1) VALUES (@param) 

    IF @@ERROR = 0 
     SET @result = 1 
    ELSE 
     SET @result = 0 

RETURN @result 

のような値を返すプロシージャを作成する必要があり@@ T-SQLステートメントにエラーが発生しなかった場合のエラーは0を返します。結果を1または0に設定することができます。@@errorの詳細については、このリンクを参照してください。

関連する問題