В моем приложении С# я использую поставщик данных Microsoft Jet OLEDB для чтения CSV файла. Строка подключения выглядит так:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data;Extended Properties="text;HDR=Yes;FMT=Delimited
Я открываю ADO.NET OleDbConnection, используя эту строку подключения, и выбираю все строки из файла CSV с помощью команды:
select * from Data.csv
Когда я открываю OleDbDataReader и просматриваю типы данных столбцов, которые он возвращает, я обнаружил, что что-то в стеке пыталось угадать типы данных на основе первой строки данных в файле. Например, предположим, что файл CSV содержит:
House,Street,Town
123,Fake Street,Springfield
12a,Evergreen Terrace,Springfield
Вызов метода OleDbDataReader.GetDataTypeName для столбца House показывает, что столбцу присвоен тип данных "DBTYPE_I4", поэтому все значения, считанные с него, интерпретируются как целые числа. Моя проблема заключается в том, что House должен быть строкой - когда я пытаюсь прочитать значение House из второй строки, OleDbDataReader возвращает null.
Как я могу сказать, что поставщик базы данных Jet или OleDbDataReader интерпретирует столбец как строки вместо чисел?