我有一个令人困惑的问题,我一直在努力许多小时无济于事。VB.NET OleDB MSAccess GetOleDBSchema返回的查询数量不正确(过程)
我们的(普通受众)应用程序将我们MS-Access数据库的最新版本中的查询与当前安装的版本和更新/同步的最终用户进行比较。相应的数据库。尽管此功能一直在运行,但现在已经被破坏。我采取了最简单的测试来证明这种行为。 OLEDB不返回正确数量的查询。
打开Access 2007数据库后,我显示查询的位置和正确的号码:
?CurrentDB.Name
C:\Users\Ron\Documents\Database4.accdb
?CurrentDB.QueryDefs.Count
1
下面的简单形式调用OleDbSchemaTable方法,但返回的错误行数/查询(= O) :
Public Class Form1
Private ConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Ron\Documents\Database4.accdb"
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim dbo As DataTable = GetSchemaInfo()
Debug.Print("Number of queries=" & dbo.Rows.Count)
End Sub
Private Function GetSchemaInfo()
Try
Dim db As DataTable
Using conn = New OleDb.OleDbConnection(ConnStr)
conn.Open()
db = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Procedures, Nothing)
End Using
Return db
Catch ex As Exception
MsgBox(ex.Message)
Return Nothing
End Try
End Function
End Class
立即窗口: 数量的查询= 0
我试过了所有我能想到的(紧凑/修复,运行在不同的机器上)。不幸的是,我只有一个Access 2007的测试版本。这可能是病毒吗?
任何和所有的想法,赞赏。
非常感谢(HansUp和Remou)。我不知道为什么使用“过程”先前在VB.NET OLEDB中同时处理Action和Select查询。 –
我也不清楚,罗恩。如果之前的'SELECT'查询包含'ORDER BY'子句,则它们将是过程而不是从模式角度来看。 – HansUp
这听起来合乎逻辑。只要它是一个(VIEW)或另一个(PROCEDURE),我终于可以解决这个问题。再次感谢! –