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

StackOverflow https://stackoverflow.com/questions/170455

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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


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

IDataReader rdr = cmd.ExecuteReader();

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

Спасибо.

Это было полезно?

Решение

Адаптированный из MSDN:

using (SqlConnection conn = new SqlConnection(connection))
{
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = new SqlCommand(query, conn);
    adapter.Fill(dataset);
    return dataset;
}

Другие советы

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

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

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

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

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

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

Затемнить имена EXCEL-таблиц В виде строки()

Затемните DtSet Как System.Data.DataSet = Новый набор данных()

Частный подраздел btnLoadData_Click (обычно отправитель от имени системы.Объект, обычно он от имени системы.EventArgs) Обрабатывает btnLoadData.Click

Затемните MyConnection Как OleDbConnection

Затемните da как System.Data.OleDb.OleDbDataAdapter

Dim i Как Целое число

MyConnection = Новая система.Данные.OleDb.OleDbConnection("поставщик=Microsoft.Jet.OLEDB.4.0;

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

'следующий метод получает все имена листов Excel в массиве gloabal 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

Общедоступная функция getexcelsheetname(обычно использует excelFileName в виде строки)

    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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top