【问题标题】:Unable to Open .DBF Files in Windows 7 That Had Worked Under XP无法在 XP 下工作的 Windows 7 中打开 .DBF 文件
【发布时间】:2010-12-20 17:25:03
【问题描述】:

我有一个 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 驱动程序的工作方式与here 的帖子类似。列出的修复是安装 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 文件?

【问题讨论】:

  • 是的,在我发帖之前已经访问了那个网站。问题是 connection.Open() 在 Windows 7 x64 下失败。 ODBC 版本在 Windows XP 下正常工作。

标签: .net vb.net dbf oledbconnection


【解决方案1】:

您是否尝试过一些备用连接字符串?看看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,所幸文件格式相对简单。这是一个演示这种直接访问的现有代码项目解决方案。

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

【讨论】:

  • 我尝试了各种连接字符串参数,但还没有找到一个可行的。我已经查看了该连接字符串页面上的所有变体,但仍然没有任何乐趣。我收到了不同的错误:ISAM,表格不是预期的格式,“无事可做”。如果我知道这些是什么类型的 DBF 类型会容易得多。 Access 2010 也无法打开这些文件,因此没有任何帮助。
  • @wergeld,您使用 DBF 进行什么类型的处理?如果您只是读取所有数据而不关心索引文件,那么 DBF 格式非常简单。您可以轻松编写一些代码来直接读取 DBF。 dbase.com/KnowledgeBase/int/db7_file_fmt.htm
  • 读入数据并在字段上完成一些转换/过滤,然后作为纯文本文件吐出。不使用索引、键等(来自 .DBF 文件,它们当然用于目的地)。这个问题与驱动程序工作(或不工作)方式的变化有关。为在 64 位上使用 JET 提供的链接没有解决我面临的问题。 DBF v7 文件文档的链接很有趣,但我现在还没有从头开始创建 DBF 阅读器 =)。
  • @wergeld,在代码项目中,有一个现成的类可供您使用,至少可以作为一个起点。 codeproject.com/KB/bugs/LoadDBF.aspx
  • 克里斯,那个代码项目链接很好用!如果您愿意,可以更新您的答案,我会将其标记为正确的。
猜你喜欢
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2012-06-27
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多