我正在尝试从测试vb.net表单连接到foxpro表(.dbf)。 我收到一条OleDbException,上面写着“无法打开文件c:\ emp \ emptbl.dbf”
尝试过以下两个连接字符串:
来自MSDN文章here 的Provider = VFPOLEDB.1;数据源= C:\ emp \ emptbl.dbf
Provider = vfpoledb; Data Source = C:\ emp \ emptbl.dbf;整理序列=机器;
后者似乎是连接到单个表时使用的类型,但是无论使用哪个都会抛出相同的异常。
我可以在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
答案 0 :(得分:3)
OleDB提供程序应该只连接到表所在的PATH ...而不是实际的文件名。连接到PATH后,您可以从位于其中的任何.Dbf文件进行查询
Provider = VFPOLEDB.1;数据源= C:\ emp
从emptbl中选择* ...
您还可以在
查看其他连接字符串设置每条评论更新。
看来你越来越近了。你的尝试没有()parens。在VFP中,在parens中,它将其解释为“查找名为EMPTBL的变量”,并从其值中查询要查询的表的名称。不需要通过OleDB连接申请。
现在,打开文件是另一个。是否有可能另一个应用程序打开了表并且该文件是独占使用的?因此也无法通过.net应用程序打开?即使是笑脸,如果你打开VFP,只是在C:\ Emp文件夹中做一个简单的创建表并在其中放入一条记录,那么你就知道没有其他程序会使用它,因为它是一个新文件。退出VFP并尝试查询该表。应该没有锁,没有其他程序期待它,所以它永远不应该被其他任何东西打开,你应该好好去。