记录无法读取;没有'MSYSObjects'的读取权限

问题描述 投票:0回答:1

在VB.NET中,我想检查表“LEDGER_FULL”是否存在。

我正在使用此查询:

SELECT MSysObjects.Name, MSysObjects.Type 
FROM MSysObjects 
WHERE (MSysObjects.Name='LEDGER_FULL') AND (MSysObjects.Type=1)

我的数据库是MS-Access数据库。一旦执行上述查询,我​​就会遇到以下异常:

记录无法读取;没有'MSYSObjects'的读取权限

怎么解决这个?

database vb.net ms-access-2010
1个回答
1
投票

不要使用MS Access系统对象。在大多数情况下,您将遇到权限问题。您可以使用OleDbConnection.GetSchema访问数据库信息(例如,表格,视图等)。

这是我用来检查表是否存在的函数:

Public Shared Function TableExists(tableName As String) As Boolean
    Using conn As New OleDbConnection(ConnectionString)
        conn.Open()
        Dim dt As DataTable = conn.GetSchema("Tables")
        Dim tables As String() = dt.AsEnumerable().Select(Function(dr) dr.Field(Of String)("TABLE_NAME")).ToArray
        Return tables.Contains(tableName)
    End Using
End Function

用法:

If Not TableExists("LEDGER_FULL") Then
    ' The table doesn't exist. Do something about it.
End If

希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.