複数のテーブルをデータセットに読み込むにはどうすればよいですか?
質問
複数のテーブルを返すストアドプロシージャがあります。両方のテーブルを実行して読み取るにはどうすればよいですか
次のようなものがあります:
SqlConnection conn = new SqlConnection(CONNECTION_STRING);
SqlCommand cmd = new SqlCommand("sp_mult_tables",conn);
cmd.CommandType = CommandType.StoredProcedure);
IDataReader rdr = cmd.ExecuteReader();
それをどのように読むかわからない...このタイプのクエリを処理する最良の方法は何ですか、データをDataSetに読み込む必要があると思いますか?これを行う最良の方法はどうですか?
ありがとう。
解決
using (SqlConnection conn = new SqlConnection(connection))
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(query, conn);
adapter.Fill(dataset);
return dataset;
}
他のヒント
結果をDataSetに読み込む場合は、DataAdapterを使用した方が良いでしょう。
ただし、DataReaderを使用して、最初の結果セットを反復処理し、NextResultを呼び出して2番目の結果セットに進みます。
リーダーは、返された順序で結果セットを処理します。最初の結果セットの処理が完了したら、rdr.NextResult()を呼び出して次の結果セットを設定します
テーブルアダプタは、すべての結果セットをデータセットのテーブルに自動的に読み込みますが、データテーブルは型指定されず、Table1、Table2などと名付けられます。
*すべてのExcelシート名を読み取り、テーブル名をシート名として単一のデータセットに複数のシートを追加します。*
'グローバル変数
String()としてexcelSheetNamesを暗くする
Dim DtSet As System.Data.DataSet = New DataSet()
Private Sub btnLoadData_Click(ByVal sender As System.Object、ByVal e As System.EventArgs)ハンドルbtnLoadData.Click
OleDbConnectionとしてMyConnectionを暗くする
Dim da As System.Data.OleDb.OleDbDataAdapter
Dim i As Integer
MyConnection = New System.Data.OleDb.OleDbConnection(" provider = Microsoft.Jet.OLEDB.4.0;
data source = SStatus.xls; Extended Properties ="" Excel 8.0; HDR = NO; IMEX = 1"" ")
'followingメソッドは、グローバル配列excelSheetNamesのすべてのExcelシート名を取得します
GetExcelSheetNames(" SStatus.xls")
For Each str As String In excelSheetNames
da = New OleDbDataAdapter("select * from [" & str & "]", MyConnection)
da.Fill(DtSet, excelSheetNames(i))
i += 1
Next
DataGridView1.DataSource = DtSet.Tables(0)
End Sub
パブリック関数GetExcelSheetNames(ByVal excelFileName As String)
Dim con As OleDbConnection = Nothing
Dim dt As DataTable = Nothing
Dim conStr As String = ("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=") + excelFileName & ";Extended Properties=Excel 8.0;"
con = New OleDbConnection(conStr)
con.Open()
dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
excelSheetNames = New String(dt.Rows.Count - 1) {}
Dim i As Integer = 0
For Each row As DataRow In dt.Rows
excelSheetNames(i) = row("TABLE_NAME").ToString()
i += 1
Next
End Function