En mi aplicación C# estoy usando el proveedor de datos OLEDB de Microsoft Jet para leer un archivo CSV. La cadena de conexión es el siguiente:Al leer un archivo CSV utilizando un DataReader y el proveedor de datos OLEDB Jet, ¿cómo puedo controlar los tipos de datos de columna?
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data;Extended Properties="text;HDR=Yes;FMT=Delimited
abro una OleDbConnection ADO.NET utilizando esa cadena de conexión y seleccionar todas las filas del archivo CSV con el comando:
select * from Data.csv
Cuando abro una OleDbDataReader y examinar los tipos de datos de las columnas que devuelve, encuentro que algo en la pila ha intentado adivinar los tipos de datos basados en la primera fila de datos en el archivo. Por ejemplo, supongamos que el archivo CSV contiene:
House,Street,Town
123,Fake Street,Springfield
12a,Evergreen Terrace,Springfield
Al llamar al método OleDbDataReader.GetDataTypeName para la columna de la casa va a revelar que la columna se le ha dado el tipo de datos "DBTYPE_I4", por lo que todos los valores leídos desde que se interpretan como enteros. Mi problema es que House debería ser una cadena: cuando trato de leer el valor de House desde la segunda fila, OleDbDataReader devuelve null.
¿Cómo puedo decirle al proveedor de la base de datos Jet o al OleDbDataReader que interprete una columna como cadenas en lugar de números?
Esto omitiría el OleDbProvider por completo, lo que probablemente sea algo bueno. Los valores devueltos por 'record [" FieldName "]' son todas cadenas: mi código necesitaría saber de antemano qué tipo de datos se espera de cada columna, y ejecutar las cadenas a través de 'System.Convert'. –