【发布时间】:2010-02-22 17:13:08
【问题描述】:
我在 Windows Server 2008 64 位版本中解析 *.CSV 文件时遇到了一些问题。 Jet OLEDB 4.0 不读取 CSV 中显示的标题行的问题。
这意味着,当我尝试访问这样的列之一时:
DataTable tbl = GetCsvData();
string sd = tbl.Rows[0]["id"].ToString();
程序抛出异常,表示该列不属于数据表。
我正在使用以下代码:
public DataTable GetCsvData() {
FileInfo file = new FileInfo(this.fileName);
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + file.DirectoryName + "\\;" +
"Extended Properties=\"text;HDR=Yes;FMT=Delimited(;)\";";
OleDbConnection objConn = new OleDbConnection(connectionString);
objConn.Open();
OleDbCommand objCmdSelect = new OleDbCommand(string.Format("SELECT * FROM [{0}]", file.Name), objConn);
OleDbDataAdapter adp = new OleDbDataAdapter(objCmdSelect);
DataTable tbl = new DataTable("CSVData");
adp.Fill(tbl);
objConn.Close();
objConn.Dispose();
return tbl;
}
如您所见,扩展属性是正确的:“HDR=Yes”,这会强制 Jet 引擎读取 CSV 文件的标题行。
这个问题真的很奇怪,因为我可以在我的开发机器(Windows XP SP3)上读取相同的 CSV 文件,完全没有问题。
我认为这是源自 64 位版本的 Windows server 2008 的问题。
我检查了服务器和本地机器上的 msjet40.dll 文件的版本:
Windows XP SP3 => 4.0.9551
Windows Server 2008 64 bit => 4.0.9755
问题不在于 CSV 文件,而在于 Microsoft 提供的驱动程序(至少我是这么认为的),因为我可以在我的机器上完美地读取 CSV 文件。
有没有办法解决这个问题?我用谷歌搜索了很多,但我找不到任何东西。
谢谢..
【问题讨论】:
-
你能通过连接到来自两个系统的外部应用程序的数据来验证它是驱动程序吗?例如,Excel 或 SQL 链接查询(您的服务器上可能没有 Excel)。
-
我的服务器上没有 Excel...这是肯定的...而且我无法验证...谢谢...
-
JET 驱动程序在 64 位模式下不可用。您是否强制您的程序以 32 位模式运行?
-
是的,我做到了...当我在 64.bit 模式下运行时,Web 应用程序会抛出一个异常,说明 Jet 驱动程序未注册。谢谢。