2009-07-02 6 views
2

DBから2つのテーブルから情報をプルダウンしたい。 Aからの1つの行と、BからBへの行と、Aから引っ張られた行へ。2つのSELECTS、1つのクエリ

私はこれを2つのselect文で1つの格納されたprocにしたいと思っています。 DB。

私は単一の選択から情報を引き出すいくつかの方法を知っていますが、複数の選択からデータを取得する方法は覚えていません。私は何百万というものを記述していない状況を記述するために名詞/動詞を思いつくのに苦労しているので、グーグルリングは難しいと判明しています。

誰かが正しい方向に向かうことができますか?

(物事を単純にするために、私は "using"ステートメントなどを使用することを知っています...私はアプローチの基本的な考え方が必要です)。

using (SqlConnection conn = new SqlConnection(connectionString)) 
{ 
    using (SqlCommand com = new SqlCommand(commandString, conn)) 
    { 
     <somehow get multiple select's of data here in one call> 
    } 
} 

答えて

4

あなたがSqlDataReaderの使用に慣れているなら、あなたは自分のストアドプロシージャまたはSQLステートメントを持っている必要があり、複数の選択を行うとに移動しNextResult()を呼び出します次の結果セット:

using (SqlConnection conn = new SqlConnection(connectionString)) 
{ 
    conn.Open(); 
    SqlCommand cmd = new SqlCommand(commandString, conn); 
    // Add parameters here 
    using (SqlDataReader reader = cmd.ExecuteReader()) 
    { 
     // This will read the first result set 
     while(reader.Read()) 
     { 
      // Read data 
     } 

     // This will read the second result set 
     if (!reader.NextResult()) 
     { 
      throw new ApplicationException("Only one result set returned"); 
     } 

     while (reader.Read()) 
     { 
      // Read data 
     } 
    } 
} 

あなたは、あなたがする必要があるすべてはあなたのデータアダプタは、データセットを満たしており、表のプロパティから結果セットを抽出されたデータテーブルを返すデータアダプタを使用して使用している場合:

​​
+0

恐ろしい、そして完全な。 2番目の答えは私が以前に見たものですが、どちらも知っておくと良いです。どうもありがとう。 – Beska

0

は、あなたが1 DataTableCollectionとして複数選択からのDataTableをロードできるようにするM.A.R.Sを、使用する必要があります。

+1

元の投稿には、複数の結果セットを同時に表示する必要はありません。 –

3
var reader = com.ExecuteReader(); 

while(reader.Read()) 
{ 
    //do operations for the first select here 
} 

reader.NextResult(); 

while(reader.Read()) 
{ 
    //do operations for the second select here 
} 

注:構文エラーがある可能性があり、チェックされません。しかし、重要な点は、SqlDataReader.NextResult()を使用することです。

+0

これはまさに私が必要とするように見えますが、私は.ReadNext()メソッドを見ていないようです...私は必要なライブラリを引っ張っていませんか? – Beska

+0

@Beska:NextResult、ReadNextではありません。私はちょうどコードを更新しました。 –

0

私はあなたがしようとしていることを誤解しているかもしれませんが、この情報を得るために結合とデータウェアーを使用することはできませんか?

おおよそ(あなたのコマンドのusingステートメントで)

select a.foo, b.bar from a, b where a.id = 2 and b.foo = a.foo; 

using(DbDataReader reader = com.executeReader()) 
{ 
    while(reader.read()) 
    { 
     myA.foo = reader[0].toString(); 
     myB.bar = reader[1].toString(); 
    } 
} 
関連する問題