Как я могу прочитать несколько таблиц в наборе данных? - PullRequest
4 голосов
/ 04 октября 2008

У меня есть хранимая процедура, которая возвращает несколько таблиц. Как я могу выполнить и прочитать обе таблицы?

У меня есть что-то вроде этого:


SqlConnection conn = new SqlConnection(CONNECTION_STRING);
SqlCommand cmd = new SqlCommand("sp_mult_tables",conn);
cmd.CommandType = CommandType.StoredProcedure);

IDataReader rdr = cmd.ExecuteReader();

Я не уверен, как это читать ... Каков наилучший способ обработки этого типа запроса, я полагаю, я должен прочитать данные в DataSet? Как лучше всего это сделать?

Спасибо.

Ответы [ 4 ]

5 голосов
/ 04 октября 2008

Адаптировано с MSDN :

using (SqlConnection conn = new SqlConnection(connection))
{
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = new SqlCommand(query, conn);
    adapter.Fill(dataset);
    return dataset;
}
0 голосов
/ 17 марта 2009

* Чтение всех имен листов Excel и добавление нескольких листов в один набор данных с именами таблиц в качестве имен листов. *

'Глобальные переменные

Dim excelSheetNames As String ()

Dim DtSet As System.Data.DataSet = New DataSet ()

Private Sub btnLoadData_Click (отправитель ByVal как System.Object, ByVal e как System.EventArgs) Обрабатывает btnLoadData.Click

Dim MyConnection As OleDbConnection

Dim da As System.Data.OleDb.OleDbDataAdapter

Dim i As Integer

MyConnection = New System.Data.OleDb.OleDbConnection ("provider = Microsoft.Jet.OLEDB.4.0;

источник данных = SStatus.xls; Расширенные свойства = "" Excel 8.0; HDR = НЕТ; IMEX = 1 "" ")

'следующий метод получает все имена листов Excel в глобальном массиве excelSheetNames

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
0 голосов
/ 04 октября 2008

читатель будет иметь дело с наборами результатов в возвращенном порядке; когда закончите обработку первого набора результатов, вызовите rdr.NextResult (), чтобы установить следующий

обратите внимание также, что адаптер таблицы будет автоматически считывать все результирующие наборы в таблицы в наборе данных при заполнении, но таблицы данных будут иметь нетипизированный тип с именем Table1, Table2 и т. Д.

0 голосов
/ 04 октября 2008

Если вы хотите прочитать результаты в DataSet, вам лучше использовать DataAdapter.

Но для DataReader сначала выполните итерацию по первому набору результатов, а затем вызовите NextResult для перехода ко второму набору результатов.

...