【问题标题】:Trying to read data out of MSysObjects with ODbc in C#, but getting no permission error尝试在 C# 中使用 ODbc 从 MSysObjects 中读取数据,但没有获得权限错误
【发布时间】:2013-08-09 21:00:13
【问题描述】:

如标题所述: 我正在尝试从 Access 2010 数据库中的 MSysObjects 中读取数据,但出现异常,告诉我不允许从该表中读取数据。

我可以读出其他非 MSys 表。

SQL Query I am using: SELECT * FROM MSysObjects WHERE Type=1 AND Flags=0

连接字符串:

Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\mydatabase.accdb;Uid=Admin;Pwd=;

这是http://www.connectionstrings.com/access/ 上看到的标准连接字符串

如何获得从 MSysObjects 读取的权限?

【问题讨论】:

    标签: c# ms-access odbc ms-access-2010


    【解决方案1】:

    由于您的数据库是 ACCDB 格式,这意味着数据库引擎将 Admin 视为运行所有查询的用户。 Admin 没有MSysObjects 的读取 (SELECT) 权限。

    执行 DDL GRANT 语句以授予 Admin 该权限。

    GRANT SELECT ON MSysObjects TO Admin;
    

    我不确定是否可以从 ODBC 连接执行该语句。如果失败,请在 Access 应用程序会话中打开数据库并在那里运行。

    CurrentProject.Connection.Execute "GRANT SELECT ON MSysObjects TO Admin;"
    

    请注意,语句必须从 ADO 执行。 CurrentProject.Connection是一个ADO对象,所以它的Execute方法可以成功运行语句。如果您尝试使用某些基于 DAO 的方法,例如 CurrentDb.Execute 或在查询设计器中将语句作为查询运行,它将失败并出现错误 3129, "Invalid SQL statement; expected 'DELETE', 'INSERT '、'PROCEDURE'、'SELECT' 或 'UPDATE'。"

    或者,如果您从 OleDb 连接到 Access db 运行它,它应该可以在 c# 中运行。

    【讨论】:

    • 我尝试在 Acces 内部和通过我自己的程序执行您的第一个查询,但都没有成功。
    • 访问需要选择、编辑、删除命令,而不是授权。我找到了一种解决方法,因此我不需要更改权限,因为我不再需要读出 MSysObjects。我将停止解决这个问题,但欢迎进一步讨论。谢谢汉斯。
    • 使用CurrentProject.Connection在Access中执行语句。
    猜你喜欢
    • 2013-11-27
    • 2010-12-28
    • 2015-12-26
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多