如何将数据集转换为数据表

Posted

技术标签:

【中文标题】如何将数据集转换为数据表【英文标题】:How to convert DataSet to DataTable 【发布时间】:2012-02-17 11:45:21 【问题描述】:

我正在从 SQL 表中检索数据,以便可以在页面上将结果显示为 html 表。稍后我需要能够将该表保存为 CSV 文件。

到目前为止,我已经弄清楚如何检索数据并将它们填充到数据集中以进行显示(效果很好)...

        string selectQuery = "SELECT Name, ProductNumber, ListPrice FROM Poduction.Product";

        // Establish the connection to the SQL database 
        SqlConnection conn = ConnectionManager.GetConnection();
        conn.Open();

        // Connect to the SQL database using the above query to get all the data from table.
        SqlDataAdapter myCommand = new SqlDataAdapter(selectQuery, conn);

        // Create and fill a DataSet.
        DataSet ds = new DataSet();
        myCommand.Fill(ds);

以及如何借助以下代码将它们保存在 CSV 文件中:http://www.evontech.com/login/topic/1983.html

    private void exportDataTableToCsv(DataTable formattedDataTable, string filename)
    
       DataTable toExcel = formattedDataTable.Copy();
       HttpContext context = HttpContext.Current;
       context.Response.Clear();

       foreach (DataColumn column in toExcel.Columns)
       
          context.Response.Write(column.ColumnName + ",");
       

       context.Response.Write(Environment.NewLine);
       foreach (DataRow row in toExcel.Rows)
       
          for (int i = 0; i < toExcel.Columns.Count; i++)
          
             context.Response.Write(row.ToString().Replace(",", string.Empty) + ",");
          

          context.Response.Write(Environment.NewLine);
       

       context.Response.ContentType = "text/csv";
       context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + ".csv");
       context.Response.End();
    

现在我的问题是如何将这个DataSet 转换为DataTable?我用 NO 运气尝试了这里描述的方式:http://www.ezineasp.net/post/ASP-Net-C-sharp-Convert-DataSet-to-DataTable.aspx

谁能帮帮我?

【问题讨论】:

【参考方案1】:

DataSet 已经包含 DataTables。您可以使用:

DataTable firstTable = dataSet.Tables[0];

或按名称:

DataTable customerTable = dataSet.Tables["Customer"];

请注意,您的 SQL 代码应该有 using 语句,以确保正确处理连接:

using (SqlConnection conn = ...)

    // Code here...

【讨论】:

感谢您的快速回复!我已经尝试过了:mysqlAdapter.Fill(myDataSet);数据表 myDataTable = myDataSet.Tables[0];但 CSV 文件看起来不正确,因为缺少值并替换为“System.Data.DataRow”.... Name,ProductNumber,ListPrice, System.Data.DataRow,System.Data.DataRow,System.Data.DataRow , System.Data.DataRow,System.Data.DataRow,System.Data.DataRow, System.Data.DataRow,System.Data.DataRow,System.Data.DataRow, System.Data.DataRow,System.Data.DataRow,System .Data.DataRow,如何解决这个问题? @Walahh:你的 CSV 代码在 DataRow 上调用 ToString(),这对我来说是个坏主意。我建议您将其作为一个单独的问题提出,因为它与您提出的问题确实不同。 @JonSkeet - 我从 SSIS 获取数据集。我使用 ADO.NET 连接执行 SQL 服务器查询。结果集存储在 DataSet 中。有没有一种方法可以命名我的结果集,以便它的 DataTable 也具有相同的名称?否则,我可以使用索引。 我想知道为什么需要一组DataTables,即DataSet 来存储查询的结果集。结果集始终是一个表。那么,将其存储在 DataSet 中有什么好处呢? @blasto:您可以发出多结果查询,尽管我认为这种情况比较少见。老实说,我从不喜欢“老派”的 ADO.NET...【参考方案2】:

DataSet 是 DataTables 的集合....您可以从 DataSet 中获取数据表,如下所示。

//here ds is dataset
DatTable dt = ds.Table[0]; /// table of dataset

【讨论】:

【参考方案3】:

这是我的解决方案:

DataTable datatable = (DataTable)dataset.datatablename;

【讨论】:

以上是关于如何将数据集转换为数据表的主要内容,如果未能解决你的问题,请参考以下文章

如何将 sql 转换为 spark 数据集?

如何将数据集转换为 JavaPairRDD?

如何使用 mapPartitions 函数将 Rdd 转换为数据集

如何在不转换为火花数据集的情况下遍历数据框?

如何将 JavaPairRDD 转换为数据集?

如何将包含 JSON 的输入 CSV 数据转换为 spark 数据集?