Estoy usando la biblioteca FileHelpers para importar archivos csv en la tabla de la base de datos. Tengo un problema al importar el archivo que tiene el campo que comienza con el número ('800NUMBER') en el encabezado del archivo.Problema al importar archivos CSV usando FileHelpers
Código a importar:
DataTable data = CommonEngine.CsvToDataTable(file, ',');
Excepción:
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)
no estoy seguro de si hay una manera de escapar del nombre de la columna como '[800NUMBER]'.
El nombre de la columna no se puede cambiar porque así nos lo proporciona el cliente.
Gracias,
-Oleg
solucionado este problema mediante la lectura de la fila 'cabecera' por separado de las filas de los 'datos'. Luego, cambio los nombres de las columnas en los 'datos' y uso SqlBulkCopy para importar a la base de datos.
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();
Analizar CSV con .Split() solo está pidiendo problemas. – Patonza