试图用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获取读取权限?
由于您的数据库是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#运行。