2011-01-05 3 views
2

で複数の結果を返すストアドプロシージャを結果テーブル名を設定します。は、ストアドプロシージャ

DataSet ds; 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
da.Fill(ds); 

私は結果を得ることができます。しかし、私たちはこれよりも良い行うことができると思います。私たちは名前の代わりに、インデックスでテーブルを得ることができる場合

var index = 0; 
if(ds.Tables.Count > 1){ 
    DataTable first = ds.Tables[index];  
    index++; 
    // do something 
} 
DataTable second = ds.Tables[index]; 
// do something 

が、私は興味があります。 like ...

DataTable first = ds.Tables["first"]; 
// do something 
if(ds.Tables.Containts("second")) 
{ 
    DataTable second = ds.Tables["second"]; 
    // do something 
} 

質問:ストアドプロシージャの結果テーブルの名前を設定できますか?

答えて

2

私はそうは思いません。そして、ある程度は、これを処理するのが良い方法であると私は疑う。なぜなら、n番目の結果セットが何を意味するのかを常に知っているよりも、空の結果セットを返さないのはなぜですか。

結果をプレーンテキストにレンダリングする場合以外は、複雑なロジックは必要ありませんが、結果のさまざまなケースを処理します。

なぜあなたはそれをやっていますか?パフォーマンスを向上させる神秘的な希望ですか?

アドホッククエリの場合は、ストアドプロシージャでは問題ありませんが、問題ありません。二度と思うほうがいい。

おそらく私の態度は、そのような手順をOracleに変換しなければならなかったという事実によって影響を受けており、そこには結果セットの可変数の概念がありません。結果セットごとにrefcursorパラメータを事前に指定する必要があります。

+1

結果テーブルに名前を付けることができない場合は、空の結果を返すことをお勧めします。アドバイスと共有に感謝します。 –

+0

はい、パフォーマンスを向上させることは神秘的な希望です。私はデータベースへの往復を減らそうとしています。 –

関連する問題