私の 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
House 列に対して OleDbDataReader.GetDataTypeName メソッドを呼び出すと、列にデータ型 "DBTYPE_I4" が指定されていることが明らかになるため、列から読み取られるすべての値は整数として解釈されます。私の問題は、House が文字列であることです。2 行目から House の値を読み取ろうとすると、OleDbDataReader が null を返します。
Jet データベース プロバイダまたは OleDbDataReader に、列を数値ではなく文字列として解釈するように指示するにはどうすればよいですか?