我正在使用FileHelpers庫將csv文件導入到數據庫表中。我遇到問題導入文件頭中的字段以數字('800NUMBER')開頭的文件。使用FileHelpers導入CSV文件問題
導入代碼:
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'中的列名並使用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();
使用.Split()解析CSV只是要求問題。 – Patonza 2012-10-29 12:08:15