【问题标题】: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

谁能帮帮我?

【问题讨论】:

    标签: c# asp.net html sql


    【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 2020-12-02
        • 2011-11-12
        • 2014-05-14
        • 2021-01-22
        • 1970-01-01
        • 2016-11-01
        • 2021-05-23
        • 2015-11-28
        • 1970-01-01
        相关资源
        最近更新 更多