sql—对access中的(隐藏的)系统表运行c#查询?

fquxozlt  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(267)

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

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

我得到一个错误:
无法读取记录;“msysquerys”没有读取权限。
有可能这样做吗?如果是,怎么办?我的印象是这是可能的,但我不完全确定。

vwkv1x7d

vwkv1x7d1#

正如在这里的类似问题中提到的,为了绕过
无法读取记录;“msysquerys”没有读取权限。
错误:您需要使用命令将选择权限授予默认用户“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 在上面的关键是访问2010年。其他版本的access将具有不同的值。)

cyej8jka

cyej8jka2#

您可以在access 2007中为执行此操作提供访问权限:
工具菜单->安全->用户和组权限。对msysobjects表授予管理员用户“读取数据”权限。
但您必须确保msysobjects不是出于安全原因而锁定的。

相关问题