2010-12-20 82 views
2

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

它最初用于System.Data.Odbcconnection.ConnectionString = "Driver={Microsoft dBASE VFP Driver (*.dbf)};SourceType = DBF;SourceDB=" & dbfSourcePath & ";Exclusive=No; Collate=Machine;BACKGROUNDFETCH=NO;"。 失败的位置在connection.Open()。给出的错误是:“错误[IM001] [Microsoft] [ODBC驱动程序管理器]驱动程序不支持此功能”。

我注意到VFP的驱动程序没有安装,并且Access DBF驱动程序不能像here那样工作。列出的修复程序将安装VFPro SP2,但是,我们没有任何安装Service Pack的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. 

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

+0

检查:http://connectionstrings.com/dbf-foxpro – 2010-12-20 18:26:49

+0

是的,去了该网站之前,我张贴在这里。问题是connection.Open()在Windows 7 x64下失败。 ODBC版本在Windows XP下正常工作。 – wergeld 2010-12-20 18:29:31

回答

4

您是否尝试了几个替代连接字符串?看看www.connectionstrings.com/dbf-foxpro

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

另请注意关于使用Jet进行访问的64 bit systems

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

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

+0

我已经尝试过各种连接字符串参数,并且尚未找到可用的连接字符串参数。我查看了该连接字符串页面上的所有变体,仍然没有喜悦。我一直在收到不同的错误:ISAM,表格不是预期的格式,“没事做”。如果我知道这些类型的DBF类型会更容易。此外,Access 2010无法打开这些文件,因此没有任何帮助。 – wergeld 2010-12-20 18:49:13

+0

@wergeld,你用DBF做什么类型的处理?如果您只是读取所有数据并且不关心索引文件,那么DBF格式非常简单。您可以轻松编写一些代码来直接读取DBF。 http://www.dbase.com/KnowledgeBase/int/db7_file_fmt。htm – 2010-12-20 19:09:53

+0

数据被读入,并且在作为平面文本文件吐出之前对字段进行一些转换/过滤。没有使用索引,键等(来自.DBF文件,它们当然在目标中使用)。这个问题与驾驶员工作(或不工作)方式的改变有关。提供的在64位上使用JET的链接没有解决我面临的问题。到DBF v7文件doc的链接很有趣,但是从头开始创建一个DBF阅读器并不在我眼前=)。 – wergeld 2010-12-20 19:29:22

相关问题