一尘不染

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

sql

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

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

我得到了错误:

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

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


阅读 149

收藏
2021-03-17

共1个答案

一尘不染

正如在类似的问题提到这里,以绕过

记录无法读取;没有对“ 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;";

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

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

Value:
SystemDB

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

2021-03-17