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

时间:2018-05-18 07:04:18

标签: database vb.net ms-access-2010

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

我正在使用此查询:

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

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

  

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

如何解决这个问题?

1 个答案:

答案 0 :(得分: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

希望有所帮助。