.NET怎么将CSV文件读取到DataTable中_CSV文件读取DataTable方法

使用File.ReadAllLines可处理简单csv,但需手动处理分隔符;2. 推荐TextFieldParser应对复杂CSV,能解析引号内换行与逗号;3. CsvHelper功能强但需转换才能生成DataTable;4. 注意编码、字段数一致、内存占用及列名重复问题。

.NET怎么将CSV文件读取到DataTable中_CSV文件读取DataTable方法

.net 中将 CSV 文件读取到 DataTable 是一个常见需求,尤其在处理数据导入、报表生成等场景。下面介绍几种简单有效的方法。

使用 File.ReadAllLines 和字符串处理(原生方法)

这种方法不依赖第三方库,适合结构简单的 CSV 文件。

  • 读取所有行,按行分割字段
  • 第一行通常作为列名
  • 手动处理分隔符和引号问题(注意:复杂 CSV 可能需要额外处理)

示例代码:

.NET怎么将CSV文件读取到DataTable中_CSV文件读取DataTable方法

小绿鲸英文文献阅读器

英文文献阅读器,专注提高SCI阅读效率

.NET怎么将CSV文件读取到DataTable中_CSV文件读取DataTable方法 199

查看详情 .NET怎么将CSV文件读取到DataTable中_CSV文件读取DataTable方法

using System; using System.Data; using System.IO;  public DataTable ReadCsvToDataTable(String filePath) {     var dt = new DataTable();     string[] lines = File.ReadAllLines(filePath);          if (lines.Length == 0) return dt;      // 第一行作为列名     string[] headers = lines[0].Split(',');     foreach (string header in headers)     {         dt.Columns.Add(header);     }      // 添加数据行     for (int i = 1; i < lines.Length; i++)     {         string[] fields = lines[i].Split(',');         DataRow dr = dt.NewRow();         for (int j = 0; j < fields.Length; j++)         {             dr[j] = fields[j];         }         dt.Rows.Add(dr);     }      return dt; } 

使用 TextFieldParser(推荐用于复杂 CSV)

.NET 提供了 microsoft.VisualBasic.FileIO.TextFieldParser,能正确处理带引号、换行的字段,是官方推荐方式。

  • 支持逗号、制表符等分隔符
  • 自动处理包含分隔符的文本(如 “Smith, John”)
  • 需添加对 Microsoft.VisualBasic 的引用(.NET Core/.NET 5+ 默认可用)

示例代码:

using System.Data; using Microsoft.VisualBasic.FileIO;  public DataTable ReadCsvWithTextFieldParser(string filePath) {     var dt = new DataTable();      using (var parser = new TextFieldParser(filePath))     {         parser.Delimiters = new string[] { "," };         parser.HasFieldsEnclosedInQuotes = true;          // 读取标题行         if (!parser.EndOfData)         {             string[] headers = parser.ReadFields();             foreach (string header in headers)             {                 dt.Columns.Add(header);             }         }          // 读取数据行         while (!parser.EndOfData)         {             string[] fields = parser.ReadFields();             DataRow dr = dt.NewRow();             for (int i = 0; i < fields.Length; i++)             {                 dr[i] = fields[i];             }             dt.Rows.Add(dr);         }     }      return dt; } 

使用第三方库:CsvHelper(功能强大)

如果你需要更高性能或映射到对象CsvHelper 是优秀选择。

  • NuGet 安装:Install-Package CsvHelper
  • 支持类型转换、自定义映射、多语言编码
  • 不能直接输出 DataTable,但可通过中间对象转换

基本思路:先读为 List<Dictionary<string, Object>>,再转 DataTable。

注意事项

实际使用中注意以下几点:

  • 确保 CSV 编码一致(常用 UTF-8,含 bom 时注意)
  • 字段数量不一致可能导致异常,建议加判断
  • 大数据量时考虑流式读取,避免内存溢出
  • 列名重复会导致 DataTable 异常,可做去重处理

基本上就这些。根据项目需求选择合适方式,小项目用 TextFieldParser 最稳妥。

上一篇
下一篇
text=ZqhQzanResources