【问题标题】:C# Windows Application export datatable data to .csv fileC# Windows 应用程序将数据表数据导出到 .csv 文件
【发布时间】:2018-05-10 09:03:05
【问题描述】:

我想要的是将 datatable 导出到 .csv 文件。

这是我尝试过的,但花费的时间太长:

string strFilePath= @"C:\myCSVfile.csv";

--

public void CreateCSVFile(DataTable dtDataTablesList, string strFilePath)

{
    // Create the CSV file to which grid data will be exported.

    StreamWriter sw = new StreamWriter(strFilePath, false);

    //First we will write the headers.

    int iColCount = dtDataTablesList.Columns.Count;

    for (int i = 0; i < iColCount; i++)
    {
        sw.Write(dtDataTablesList.Columns[i]);
        if (i < iColCount - 1)
        {
            sw.Write(",");
        }
    }
    sw.Write(sw.NewLine);

    // Now write all the rows.

    foreach (DataRow dr in dtDataTablesList.Rows)
    {
        for (int i = 0; i < iColCount; i++)
        {
            if (!Convert.IsDBNull(dr[i]))
            {
                sw.Write(dr[i].ToString());
            }
            if (i < iColCount - 1)

            {
                sw.Write(",");
            }
        }
        sw.Write(sw.NewLine);
    }
    sw.Close();
}

有没有其他方法可以更快地做到这一点?

提前感谢您的任何建议。

【问题讨论】:

  • 您是否从数据库中获取数据?
  • dtDataTablesList 中有多少行?
  • 几十万甚至一百万
  • 具体哪个部分需要很长时间。您的“百万”记录产生的文件有多大?
  • 我认为它在获取。大约 90 万到 300 万或更多

标签: c# c#-3.0 c#-2.0


【解决方案1】:

现在更快了,这就是我所做的:

  1. 我数了一下处理器的数量
  2. 为每个线程创建一个线程
  3. 在线程上划分行
  4. 将每个文件导出到自己的文件中
  5. 最后合并文件
  6. 添加漂亮的进度显示

【讨论】:

  • 为了编写 CSV 文件,我使用 CsvHelperFileHelpers。要从 SQL 查询中读取数据,我使用 Dapper。您可以将两者结合起来,为您的任务提供一个非常快速、可靠且占用内存更少的解决方案
猜你喜欢
  • 2012-09-01
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 2023-03-10
相关资源
最近更新 更多