2008-09-17 38 views
5

TableAdaptersを使用するときにストアドプロシージャから戻り値を取得するための洗練された方法が見つかりません。TableAdapterからストアドプロシージャの戻り値を取得する方法

テーブルアダプターは、スカラーでないストアードプロシージャー呼び出しを使用する場合、SQLストアードプロシージャーの戻り値をサポートしていないようです。自動生成された関数の戻り値はストアドプロシージャの戻り値であるが、実際には影響を受ける行の数ではないことが予想されます。可能な限り 'out'パラメータを使用し、変数を自動生成関数への参照として渡すことは可能ですが、それは非常にクリーンな解決策ではありません。

私はこれを解決するためにウェブ上でいくつかの醜いハックを見ましたが、まともな解決策はありません。どんな助けもありがとう。

+0

実際には、ハッキングなしで戻り値がサポートされないというのはうんざりです。 – nicodemus13

答えて

0

戻り値がサポートされていないため、この問題を終了しても洗練された回避策はありません。

1

戻り値を取得する方法は、DirectionがParameterDirection.ReturnValueに設定されているSqlCommandオブジェクトでSqlParameterを使用することです。 Fillを呼び出した後、TableAdapterのSelectCommandプロパティをチェックする必要があります。

+0

SelectCommandプロパティはTableAdapter専用です(AFAIK)。私は、私の意見では、私が見つけることを望んでいるエレガントなソリューションではない部分的なクラスで各TableAdapterを拡張する必要があります。 –

0

私はTableAdaptersを使用していないため、特定のことは言えませんが、ストアドプロシージャを見て、プロシージャの前後に次のものを含める必要があります。

SET ROWCOUNT OFF 

BEGIN 
<Procedure Content> 
END 

SET ROWCOUNT ON 
+0

提案していただきありがとうございますが、残念ながらROWCOUNTを設定しても問題は解決しないようです。 –

1

:誰かがすでにここ、SqlParametersを述べたように移動するための方法は、そうは言っても方向= ParameterDirection.ReturnValue

SqlParameterを使用しているDataSetを使用して動的メソッドの代替です。 (あなたが乗ってどのように厥場合):休閑として

例のSQL文とC#:

string sql = @"DECLARE @ret int 
      EXEC @ret = SP_DoStuff 'parm1', 'parm2' 
      SELECT @ret as ret"; 

DataSet ds = GetDatasetFromSQL(sql); //your sql to dataset code here... 

int resultCode = -1; 
int.TryParse(ds.Tables[ds.Tables.Count-1].Rows[0][0].ToString(), out resultCode); 

ストアドプロシージャの結果をDataSetにロードされ、ストアドプロシージャでリターンselect文限り多くのDataTableを持っています。

DataSetの最後のDataTableには、ストアドプロシージャの戻り値を含む1行と1列があります。

1

実は、あなたがする必要があるのは、SELECT文ではなく、RETURN文を使用してストアドプロシージャから、あなたの最終的な値を返すことです。 SELECTの結果は戻り値になります。たとえば、単にsp exit文を "SELECT 1"にすると、1を返します。次に、返す実際のスカラをSELECTします。

関連する問題