我试图在C#中对Access 2007数据库运行以下查询:
OleDbCommand command = new OleDbCommand();
command.Connection = connect;
command.CommandText = "SELECT * FROM MSysQueries";
OleDbDataReader reader = command.ExecuteReader();
我收到错误:
无法读取记录;没有对MSysQueries'。
的读取权限
有可能这样做吗?如果是这样的话?我觉得有可能做到这一点,但我并不完全确定。
答案 0 :(得分:4)
正如类似问题here中所提到的,绕过
无法读取记录;没有“MSysQueries”的读取权限。
错误您需要使用命令
将SELECT权限授予默认用户“Admin”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;";
可以通过读取值
从Windows注册表中检索.mdw文件的路径Key:
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Access\Access Connectivity Engine\Engines
Value:
SystemDB
(上述密钥中的值14.0
适用于Access 2010.其他版本的Access将具有不同的值。)
答案 1 :(得分:0)
您可以在Access 2007中为您提供访问权限:
工具菜单 - >安全 - >用户和组权限。给出“读取数据”#39; MSysObjects表上Admin用户的权限。
但出于安全原因,您必须确保MSysObjects没有被锁定。