【发布时间】:2019-12-06 02:30:19
【问题描述】:
我正在尝试将具有 100 万行和 45 列的 SQL Server 表导出到 .csv 文件,供用户通过 Web 界面下载,但它需要很长时间,以至于我最终不得不手动停止该过程。
我使用SqlDataReader 并在阅读器读取时写入文件以避免内存问题。该代码适用于小表(少于 3k 行),但大表继续运行,目标文件保持在 0 KB。
using (spContentConn) { using (var sdr = sqlcmd.ExecuteReader())
using (CsvfileWriter)
{
DataTable Tablecolumns = new DataTable();
for (int i = 0; i < sdr.FieldCount; i++)
{
Tablecolumns.Columns.Add(sdr.GetName(i));
}
CsvfileWriter.WriteLine(string.Join("~", Tablecolumns.Columns.Cast<DataColumn>().Select(csvfile => csvfile.ColumnName)));
while (sdr.Read())
for (int j = Tablecolumns.Columns.Count; j > 0; j--)
{
if (j == 1)
CsvfileWriter.WriteLine("");
else
CsvfileWriter.Write(sdr[Tablecolumns.Columns.Count - j].ToString() + "~");
}
}
我使用了此线程中推荐的相同答案,但仍然无效。请帮忙。 export large datatable data to .csv file in c# windows applications
【问题讨论】:
-
谢谢。在使用 CsvHelper 写入文件之前,我应该先使用数据表吗?我不希望列表适合大数据,但数据表不会花费太多时间吗?
标签: c# asp.net sql-server export-to-csv