Я использую библиотеку 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]".
Имя столбца не может быть изменено, потому что так, как клиент предоставляет его нам.
Решил эту проблему, читая строку заголовка отдельно от строк данных. Затем я изменяю имена столбцов в "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();