如何将数据集转换为数据表
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;
【讨论】:
以上是关于如何将数据集转换为数据表的主要内容,如果未能解决你的问题,请参考以下文章