对Access中的(隐藏的)系统表运行c#查询

本文关键字:系统 运行 查询 Access 中的 隐藏 | 更新日期: 2023-09-27 18:02:57

我试图在c#中对Access 2007数据库运行以下查询:

OleDbCommand command = new OleDbCommand();
command.Connection = connect;
command.CommandText = "SELECT * FROM MSysQueries";
OleDbDataReader reader = command.ExecuteReader();

我得到错误:

记录无法读取;没有MSysQueries的读权限。

这是可能的吗?如果有,那是怎么回事?我的印象是有可能做到这一点,但我不完全确定。

对Access中的(隐藏的)系统表运行c#查询

在这里的类似问题中提到,要绕过

记录无法读取;没有MSysQueries的读权限。

错误,你需要用命令

给默认用户"Admin"授予SELECT权限
GRANT SELECT ON MSysQueries TO Admin

您可以从.NET OleDbConnection执行该SQL语句,但是为了这样做,您需要在连接字符串中指定默认工作组信息文件(System.mdw)的位置,如下所示:

myConnectionString =
        @"Provider=Microsoft.ACE.OLEDB.12.0;" +
        @"Data Source=C:'Users'Public'Database1.accdb;" +
        @"Jet OLEDB:System database=C:'Users'Gord'AppData'Roaming'Microsoft'Access'System.mdw;";

.mdw文件的路径可以通过读取

值从Windows注册表中检索
Key:
HKEY_CURRENT_USER'Software'Microsoft'Office'14.0'Access'Access Connectivity Engine'Engines
Value:
SystemDB

(以上键中的14.0表示Access 2010。其他版本的Access会有不同的值)

您可以在access 2007中提供访问权限:

工具菜单->安全->用户和组权限。在MSysObjects表中赋予Admin用户'Read Data'权限。

但是您必须确保msysoobjects没有出于安全原因被锁定。

相关文章: