【问题标题】:How can I read multiple tables into a dataset?如何将多个表读入数据集中?
【发布时间】:2010-09-15 06:55:28
【问题描述】:

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

我有这样的事情:

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

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

谢谢。

【问题讨论】:

    标签: c# ado.net dataset


    【解决方案1】:

    改编自MSDN

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          * 读取所有 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

          Dim da As System.Data.OleDb.OleDbDataAdapter

          将 i 调暗为整数

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

          数据源=SStatus.xls;Extended Properties=""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
          

          【讨论】:

            猜你喜欢
            • 2020-05-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-20
            • 2014-06-18
            相关资源
            最近更新 更多