试图用C#中的ODbc从MSysObjects中读取数据,但未获得权限错误

本文关键字:数据 错误 权限 读取 中的 ODbc MSysObjects | 更新日期: 2023-09-27 18:27:01

如标题所述:我正试图从Access 2010数据库中的MSysObjects中读取数据,但收到一个异常,告诉我不允许从该表中读取数据。

我能读出其他非微软系统的表格。

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=;

这是上所示的标准连接Stinghttp://www.connectionstrings.com/access/

如何从MSysObjects获取读取权限?

试图用C#中的ODbc从MSysObjects中读取数据,但未获得权限错误

由于您的数据库是ACCDB格式,这意味着数据库引擎将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,"无效的SQL语句;应为'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'或'UPDATE'。"

或者,如果您从OleDb连接到Access数据库运行它,那么它应该从c#运行。