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

时间:2014-05-13 07:41:53

标签: c# sql ms-access ms-access-2007

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

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

我收到错误:

  

无法读取记录;没有对MSysQueries'。

的读取权限

有可能这样做吗?如果是这样的话?我觉得有可能做到这一点,但我并不完全确定。

2 个答案:

答案 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没有被锁定。