使用FileHelpers导入CSV文件时出现问题

本文关键字:问题 文件 FileHelpers 导入 CSV 使用 | 更新日期: 2023-09-27 17:51:24

我使用FileHelpers库将csv文件导入数据库表。我在导入文件时遇到了一个问题,该文件在文件头中具有以数字('800NUMBER')开头的字段。

导入代码:
DataTable data = CommonEngine.CsvToDataTable(file, ',');

例外:
FileHelpers.FileHelpersException: The string '800NUMBER' not is a valid .NET identifier. at FileHelpers.RunTime.FieldBuilder..ctor(String fieldName, String fieldType) at FileHelpers.RunTime.DelimitedClassBuilder.AddField(String fieldName, String fieldType) at FileHelpers.RunTime.CsvClassBuilder.AddField(String fieldName, String fieldType) at FileHelpers.RunTime.DelimitedClassBuilder.AddField(String fieldName) at FileHelpers.RunTime.CsvClassBuilder..ctor(CsvOptions options) at FileHelpers.CsvEngine.CsvToDataTable(String filename, String classname, Char delimiter, Boolean hasHeader) at FileHelpers.CommonEngine.CsvToDataTable(String filename, Char delimiter)

我不确定是否有一种方法来逃避列名,如'[800NUMBER]'。

列名不能更改,因为这是客户端提供给我们的方式。


通过将'header'行与'data'行分开读取来解决此问题。然后,我更改'data'中的列名,并使用SqlBulkCopy将其导入数据库。

    FileHelpers.CsvOptions options = new FileHelpers.CsvOptions("ImportRecord", ',', file);
    options.HeaderLines = 0;        
    FileHelpers.CsvEngine engine = new FileHelpers.CsvEngine(options);
    engine.Options.IgnoreFirstLines = 0; 
    DataTable header = engine.ReadStringAsDT(FileHelpers.CommonEngine.RawReadFirstLines(file, 1)); 
    engine.Options.IgnoreFirstLines = 1;
    DataTable data = engine.ReadFileAsDT(file); 
    for (int i = 0; i < header.Columns.Count; i++)
        data.Columns[i].ColumnName = header.Rows[0][i].ToString();

使用FileHelpers导入CSV文件时出现问题

查看FileHelpers的源代码,除了更改列名之外,没有什么可做的。但是,您可以很容易地更改FileHelpers,以便在创建c#字段之前修饰CSV字段名。

当然,CSV并不是世界上最复杂的格式——如果你知道你不需要处理转义的逗号,那么String.Split(',', myLine)通常就是你所需要的。就我个人而言,我怀疑我是否会仅仅为了读取CSV文件而引入第三方依赖项的麻烦。