【问题标题】:Cannot connect to dbf file无法连接到 dbf 文件
【发布时间】:2013-05-10 20:58:16
【问题描述】:

我正在尝试从测试 vb.net 表单连接到 foxpro 表 (.dbf)。 我收到 OleDbException 消息“无法打开文件 c:\emp\emptbl.dbf”

已尝试使用以下两个连接字符串:

Provider=VFPOLEDB.1;数据源=C:\emp\emptbl.dbf

来自 MSDN 文章 here

Provider=vfpoledb;Data Source=C:\emp\emptbl.dbf;Collat​​ing Sequence=machine;

来自connectionstrings.com

后者似乎是连接到单个表时使用的类型,但无论使用哪种类型都会引发相同的异常。

我可以在visual foxpro 6.0 中打开并执行相同的查询。 这是我的代码:

    Dim tbl As DataTable = New DataTable()

        Using con = New OleDbConnection(conString)
            cmd = New OleDbCommand() With {.Connection = con, .CommandType = CommandType.Text}
            Dim sSQL As String = "SELECT * FROM(EMPTBL)"
            cmd.CommandText = sSQL
            Dim adp As OleDbDataAdapter = New OleDbDataAdapter(cmd)
            Dim ds As DataSet = New DataSet()
            con.Open()
            adp.Fill(ds)
            con.Close()
            If (ds.Tables.Count > 0) Then
                tbl = ds.Tables(0)
            End If
        End Using

    Return tbl

【问题讨论】:

  • 可能不相关,但您是否为 AnyCPU 编译并在 x64 操作系统上运行?
  • 哈哈!更改为“任何 cpu”似乎做得不错。抛出异常,但现在显示消息“'vfpoledb' 提供程序未在本地计算机上注册”。所以,这至少是现在要研究的事情。谢谢!
  • 不,这意味着相反。您正确使用了 x86 平台,因此您生成的 32 位代码与 32 位驱动程序一起使用,而不管底层操作系统的位数如何。如果您切换到 AnyCPU,您会在 64 位系统上生成 64 位代码,并且此代码无法与 32 位驱动程序 (VFPOLEDB) 一起使用
  • 啊,疯了!感谢您为我解决这个问题。

标签: vb.net oledb foxpro


【解决方案1】:

OleDB 提供程序应该只连接到表所在的路径...而不是实际的文件名。连接到 PATH 后,您可以从其中的任何 .Dbf 文件中进行查询

Provider=VFPOLEDB.1;数据源=C:\emp

select * from emptbl where ...

您还可以查看其他连接字符串设置

ConnectionStrings.com

更新每条评论。

看来你越来越近了。在没有 () 括号的情况下尝试。在 VFP 中,在括号内,它将其解释为“查找名为 EMPTBL 的变量”,并且其值是要从中查询的表的名称。不需要通过 OleDB 连接申请。

现在,无法打开文件是另一个问题。是否有可能另一个应用程序打开了表并且文件被独占使用?因此.net应用程序也无法打开?即使是为了笑,如果你打开 VFP,然后在 C:\Emp 文件夹中创建一个简单的表并在其中放入一条记录,那么你知道没有其他程序会使用它,因为它是一个新文件。退出 VFP 并尝试查询该表。应该没有锁,没有其他程序期待它,所以它不应该被其他任何东西打开,你应该很高兴。

【讨论】:

  • 我已经尝试过这些设置。收到消息“未找到变量 empTbl”。但是,如果我将查询从“SELECT * FROM(EMPTBL)”更改为“SELECT * FROM EMPTBL”,则会收到上一个错误“无法打开文件 c:\emp\emptbl .dbf”。在这个阶段,这可能只是我对 Foxpro 发挥作用的无知。谢谢
  • 你一针见血。 Muggins 在 Visual Foxpro 中打开了表。没有意识到这可能是个问题。无论哪种情况,我都关闭了 foxpro,删除了查询中的括号,然后宾果游戏!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
相关资源
最近更新 更多