使用FileHelpers导致导入CSV文件

时间:2011-04-22 16:51:52

标签: c# csv filehelpers

我正在使用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]'。

无法更改列名称,因为这是客户端向我们提供的方式。

谢谢你,
-Oleg


通过分别从'data'行读取'header'行解决了这个问题。然后,我更改'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();

1 个答案:

答案 0 :(得分:2)

查看FileHelpers的来源,除了更改列名之外,您无法做到这一点。但是,在创建C#字段之前,您可以非常轻松地更改FileHelper以装饰CSV字段名称。

当然,CSV不是世界上最复杂的格式 - 如果你知道你不必处理转义的逗号,那么String.Split(',', myLine)通常几乎< / em>你需要的一切。就个人而言,我怀疑我是否只是为了阅读CSV文件而引入了第三方依赖的麻烦。