2011-07-12 36 views
4

は私のSQLです:ストアドプロシージャから戻り値を取得するにはどうすればよいですか?ここ

IF (SELECT Status FROM dbo.Coupon WHERE Guid = @pGuid) = 0 
BEGIN 
    UPDATE 
     dbo.Coupon 

    SET 
     Status = @pStatus 

    WHERE 
     Guid = @pGuid 

    RETURN 0  
END 

ELSE 

RETURN 1; 

そしてここでは、私のC#があります:

try 
      { 
       DbCommand command = db.GetStoredProcCommand("upd_Coupon_p"); 
       db.AddInParameter(command, "@pGuid", DbType.String, s); 
       db.AddInParameter(command, "@pStatus", DbType.Byte, 1); 
       ds = db.ExecuteDataSet(command); 
      } 

は、どのように私は私のコードの0または1の内部の戻り値を得ることができますか?

+0

ストアドプロシージャから戻り値を取得するにはどうすればよいですか? – SkyDawg33

+0

はdbで、カスタムデータベースクラスのインスタンスですか?あ、ちょっと待って!あなたはELを使用しています! –

答えて

5

あなたはこのように、戻り値のパラメータを追加します。

SqlCommandオブジェクトの場合:

parameters.Add("@retValue", DbType.Int32, ParameterDirection.ReturnValue); 

をELについて、あなたはdb.AddParameter()を使用してParameterDirection.ReturnValueを指定したいと思います。

さらに、データベースの行数がオンである限り、実行中の更新では、更新/挿入/削除/などの影響を受ける行の数を示すExecuteNonQuery()の結果を使用できます。 。影響を受けた行が0(いずれも見つかりませんでした)の場合は処理できます。

+0

ここでの答えはもう少し詳しく述べています:http://stackoverflow.com/questions/520735/can-you-use-cmd-executescalar-when-the-sproc-uses-return-value –

-1

DbCommand.ExecuteDataSet()とは何ですか、なぜExecuteScalar()を使用しないのですか?

-1

変数を出力として宣言し、データアクセスセクションの呼び出し関数内で取得します。

・ホープ、このことができますが

+0

追加する必要はありません興味のあるものがすべて戻り値であれば出力パラメータです。戻り値の列挙型を使用して他の回答に詳しく説明されています。確かに、あなたが提案したものに間違いはありませんが、ちょっと不必要です。 –

0

..

AddOutParameter(.....); 

、データアクセス]セクションで

@ReturnStatus int output //inside your stored procedure argument section 

次を使用し、ストアドプロシージャでは、以下のコードを参照してください

これは私がやったことなので、基本的にはReturnValueを使うだけですが、他の部分は役に立つかもしれません。

  var retparam = new SqlParameter("@return", System.Data.SqlDbType.Int) { Direction = System.Data.ParameterDirection.ReturnValue }; 
      comm.Parameters.Add(retparam); 
      comm.ExecuteNonQuery(); 
      int ret = 0; 
      if (retparam == null) 
      { 
       System.Diagnostics.Debug.WriteLine("retparam was null"); 
      } 
      else if (retparam.Value == null) 
      { 
      } 
      else 
      { 
       // use reparam.Value.ToString() 
      } 
関連する問題