在VB.NET中,我想检查表“LEDGER_FULL”是否存在。
我正在使用此查询:
SELECT MSysObjects.Name, MSysObjects.Type
FROM MSysObjects
WHERE (MSysObjects.Name='LEDGER_FULL') AND (MSysObjects.Type=1)
我的数据库是MS-Access数据库。一旦执行上述查询,我就会遇到以下异常:
无法读取记录;没有'MSYSObjects'的读取权限
如何解决这个问题?
答案 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
希望有所帮助。