对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的读权限。
这是可能的吗?如果有,那是怎么回事?我的印象是有可能做到这一点,但我不完全确定。
在这里的类似问题中提到,要绕过
记录无法读取;没有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没有出于安全原因被锁定。