如何将多个表读取到数据集中?

问题描述 投票:0回答:5

我有一个返回多个表的存储过程。我如何执行和读取这两个表?

我有这样的东西:


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

IDataReader rdr = cmd.ExecuteReader();

我不知道如何阅读它...处理此类查询的最佳方法是什么,我猜我应该将数据读入数据集?最好的方法是什么?

谢谢。

c# ado.net dataset
5个回答
5
投票

改编自MSDN

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

0
投票

如果你想将结果读入DataSet,你最好使用DataAdapter。

但是使用 DataReader,首先迭代第一个结果集,然后调用 NextResult 前进到第二个结果集。


0
投票

读者将按照返回的顺序处理结果集;处理完第一个结果集后,调用 rdr.NextResult() 来设置下一个结果集

另请注意,表适配器会在填充时自动将所有结果集读入数据集中的表中,但数据表将是无类型的并命名为 Table1、Table2 等。


0
投票

* 读取所有 Excel 工作表名称并将多个工作表添加到单个数据集中,以表名作为工作表名称。*

'全局变量

将 excelSheetNames 调暗为 String()

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

Private Sub btnLoadData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 btnLoadData.Click

将 MyConnection 调暗为 OleDbConnection

将 da 作为 System.Data.OleDb.OleDbDataAdapter

将 i 调暗为整数

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

数据源=SStatus.xls;扩展属性=""Excel 8.0;HDR=NO;IMEX=1"" ")

'以下方法获取全局数组 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

0
投票

public DataSet GetDataSet(string procedureName, SqlParameter[] 参数) { 尝试 { 数据集_Dataset = 新数据集(); 使用 (SqlConnection 连接 = new SqlConnection(this._connectionString)) { if (connection.State == ConnectionState.Open) { 连接.关闭(); } SqlDataAdapter 适配器 = new SqlDataAdapter(); 适配器.SelectCommand = new SqlCommand(ProcedureName, 连接); if (参数!= null) foreach (var p in 参数) 适配器.SelectCommand.Parameters.Add(p); 适配器.Fill(_Dataset);

      }
      return _Dataset;
  }
  catch (Exception)
  {

      throw;
  }

}

© www.soinside.com 2019 - 2024. All rights reserved.