2

我有一个 VB.NET 应用程序,它可以让我预览来自我们的一些客户的 .DBF 文件。然后,该应用程序会尝试从该文件中生成 CSV,然后我们可以在各种环境中使用该 CSV。此应用程序在 Windows XP 32 位下运行。我们公司最近将我们大多数人升级到 Windows 7 x64,这导致此应用程序失败。我验证了此应用程序的目标构建是 x86 而不是“任何 CPU”,并重新构建了应用程序,但出现了同样的问题。

它最初使用System.Data.Odbcconnection.ConnectionString = "Driver={Microsoft dBASE VFP Driver (*.dbf)};SourceType = DBF;SourceDB=" & dbfSourcePath & ";Exclusive=No; Collate=Machine;BACKGROUNDFETCH=NO;"。故障的位置在connection.Open()。给出的错误是:“ERROR [IM001] [Microsoft][ODBC Driver Manager] Driver does not support this function”。

我注意到没有安装 VFP 的驱动程序,并且 Access DBF 驱动程序的工作方式与此处的帖子类似。列出的修复是安装 VFPro SP2,但是,我们没有安装任何 FoxPro 来安装服务包。然后我尝试为 VFP 9.0 安装 OLEDB 驱动程序,现在正在使用System.Data.OleDbconnection.ConnectionString = "Provider=VFPOLEDB.1;SourceDB=" & dbfSourcePath & ";"但它现在告诉我该connection.Open()行有此错误:“功能不可用”。

我完全不知道如何让这个应用程序在 Windows 7 x64 下工作。下面是代码的 2 个变体,为了便于阅读,删除了文件打开路径(我已经验证了路径和文件存在):

ODBC 版本:

Imports System.Data.Odbc
Dim strSelect As String
strSelect = "SELECT * FROM " & dbfSourceName
Dim connection As New Odbc.OdbcConnection
Dim adp As New Data.Odbc.OdbcDataAdapter
connection.ConnectionString = "Driver={Microsoft dBASE VFP Driver (*.dbf)};SourceType = DBF;SourceDB=" & dbfSourcePath & ";Exclusive=No; Collate=Machine;BACKGROUNDFETCH=NO;"
Dim command As New OdbcCommand(strSelect, connection)
connection.Open()          ' Here is where it throws the error.

OLEDB版本:

Imports System.Data.OleDb
Dim strSelect As String
strSelect = "SELECT * FROM " & dbfSourceName
Dim connection As OleDbConnection = New OleDbConnection()
Dim adp As New Data.OleDb.OleDbDataAdapter
connection.ConnectionString = "Provider=VFPOLEDB.1;SourceDB=" & dbfSourcePath & ";"
Dim Command As New OleDbCommand(strSelect, connection)
connection.Open()          'Error occurs here.

如何使用 OLEDB 或 ODBC 连接在 Windows 7 x64 下打开这些 .DBF 文件?

4

1 回答 1

4

您是否尝试过一些备用连接字符串?看看www.connectionstrings.com/dbf-foxpro

connection.ConnectionString = _
  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
  dbfSourcePath & ";Extended Properties=dBASE IV;"

另请参阅在64 位系统上使用 Jet for Access 的说明

更新: 作为使用 Jet 驱动程序的替代方案,您可以直接访问 DBF,幸运的是文件格式相对简单。这是演示这种直接访问的现有代码项目解决方案。

http://www.codeproject.com/KB/bugs/LoadDBF.aspx

于 2010-12-20T18:28:06.700 回答