В своем приложении C # я использую поставщик данных 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 для столбца «Дом» покажет, что столбцу присвоен тип данных «DBTYPE_I4», поэтому все значения, считанные из него, интерпретируются как целые числа. Моя проблема в том, что House должен быть строкой - когда я пытаюсь прочитать значение House из второй строки, OleDbDataReader возвращает null.
Как я могу сказать либо поставщику базы данных Jet, либо OleDbDataReader интерпретировать столбец как строки вместо чисел?