我有一个VB.NET应用程序,可以让我预览来自我们的一些客户端的.DBF文件。然后,应用程序尝试从此文件中吐出CSV,然后我们可以在各种环境中使用该文件。 此应用程序在Windows XP 32位下运行。我们公司最近将我们大多数人升级到Windows 7 x64,这导致该应用程序失败。我验证了此应用程序的目标构建版本是x86而不是“任何CPU”并重建了应用程序,但发生了同样的问题。
最初使用System.Data.Odbc
和connection.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]驱动程序不支持此功能”。
我注意到没有安装VFP的驱动程序,并且Access DBF驱动程序的工作方式与帖子here不同。其中列出的修复程序是安装VFPro SP2,但是,我们没有任何FoxPro安装来安装Service Pack。然后我尝试为VFP 9.0安装OLEDB驱动程序,现在使用System.Data.OleDb
和connection.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.
如何在Windows 7 x64下使用OLEDB或ODBC连接打开这些.DBF文件?
答案 0 :(得分:4)
您是否尝试过一些备用连接字符串?看看www.connectionstrings.com/dbf-foxpro
connection.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
dbfSourcePath & ";Extended Properties=dBASE IV;"
另请参阅64 bit systems
上有关使用Jet for Access的说明<强>更新强> 作为使用Jet驱动程序的替代方法,您可以直接访问DBF,幸运的是文件格式相对简单。这是一个现有的代码项目解决方案,演示了这种直接访问。