尝试使用C#中的ODbc读取MSysObjects中的数据,但没有获得权限错误

时间:2013-08-08 08:15:21

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

如标题所述: 我试图从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读取的权限?

1 个答案:

答案 0 :(得分:4)

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

执行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#开始工作。