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

Ben*_*Ben 1 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();
Run Code Online (Sandbox Code Playgroud)

我得到错误:

无法读取记录;对“MSysQueries”没有读取权限。

是否有可能做到这一点?如果是这样怎么办?我的印象是可以做到这一点,但我不完全确定。

Gor*_*son 5

正如这里的类似问题中提到的,为了绕过

无法读取记录;对“MSysQueries”没有读取权限。

错误,您需要使用命令将 SELECT 权限授予默认用户“Admin”

GRANT SELECT ON MSysQueries TO Admin
Run Code Online (Sandbox Code Playgroud)

您可以从 .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;";
Run Code Online (Sandbox Code Playgroud)

可以通过读取值从 Windows 注册表中检索到 .mdw 文件的路径

Key:
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Access\Access Connectivity Engine\Engines

Value:
SystemDB
Run Code Online (Sandbox Code Playgroud)

14.0以上键中的值适用于 Access 2010。其他版本的 Access 将具有不同的值。)