在我的 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 应该是一个字符串 - 当我尝试从第二行读取 House 值时,OleDbDataReader 返回 null。
如何告诉 Jet 数据库提供程序或 OleDbDataReader 将列解释为字符串而不是数字?