2016-04-01 7 views
0

SQL Server私は2つのselect文を実行するストアドプロシージャを持っています。私は簡単に1つの選択ステートメントを返してDataTableに格納することができますが、どのように2つを使用するのですか?複数のデータテーブルを反復する

変数countfromfirstselectstatementを最初のselect文から返されたカウントと同じにするにはどうすればいいですか?変数countfromsecondselectstatementを2番目の選択から返されたカウントと同じにするにはどうすればよいですか。

private void ReturnTwoSelectStatements() 
{ 
    DataSet dt112 = new DataSet(); 
    using (var con = new SqlConnection(connectionString)) 
    { 
    using (var cmd = new SqlCommand("Return2SelectStatements", con)) 
    { 
     using (var da = new SqlDataAdapter(cmd)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      da.Fill(dt112); 
     } 
    } 
    } 
    DataTable table1 = dt112.Tables[0]; 
    DataTable table2 = dt112.Tables[1]; 

    string countfromFirstSelectStatement = table1.Rows.Count().ToString(); 
    string countfromSecondSelectStatement = table2.Rows.Count().ToString(); 

    //I only want to iterate the data from the 1st select statement 
    foreach (DataRow row in dt112.Rows) 
    { 

    } 
} 
+1

をあなたの代わりにDataSetを記入してみましたか? DataSetにはTablesコレクションがあります。 – Steve

+0

@Steve - データテーブルにデータセットを取り込み、テーブルを反復する代わりに? – RashidInman

+0

はい、またはLuaanの回答として。 – Steve

答えて

1

がselect文とアクセスの両方でそれをデータセットを入力します。

.... 
DataSet dataSet = new DataSet(); 
da.Fill(dataSet); 
.... 

DataTable table1 = dataSet.Tables[0]; 
DataTable table2 = dataSet.Tables[1]; 

string countfromFirstSelectStatement = table1.Rows.Count.ToString(); 
string countfromSecondSelectStatement = table2.Rows.Count.ToString(); 
+0

申し訳ありません。 'DataSet.Tables'プロパティを追加するのを忘れました。ありがとう@Steve – cyi

+0

これは私の反復構文をスローする - これをforeach(dt112.RowsのDataRow行)に変更する必要がある場合 – RashidInman

+0

あなたのエラーは何ですか? – cyi

2

また、直接、次の結果セットに進めるためにあなたにNextResultを与える、DbDataReadercmd.ExecuteReader())を使用することができます。 DataTable.Loadを使用すると、データ・リーダーから表に行をロードできます。

DbDataAdapterは、実際にはデータテーブルにデータを読み込むためのちょっとした過剰です。実際のデータソースから抽象化されたコントロールのCRUDの幅広い操作を可能にするように設計されていますが、これはあなたのケースではありません。

サンプル:

using (var reader = cmd.ExecuteReader()) 
{ 
    dataTable1.Load(reader); 

    if (!reader.NextResult()) throw SomethingWhenTheresNoSecondResultSet(); 

    dataTable2.Load(reader); 
} 
関連する問題