1

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

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

提供者=VFPOLEDB.1;数据源=C:\emp\emptbl.dbf

从这里的 MSDN 文章

提供者=vfpoledb;数据源=C:\emp\emptbl.dbf;整理顺序=机器;

来自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
4

1 回答 1

3

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

提供者=VFPOLEDB.1;数据源=C:\emp

select * from emptbl where ...

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

ConnectionStrings.com

更新每条评论。

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

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

于 2013-05-10T11:45:15.057 回答