没有MSysObject错误的读取权限

我试图通过OleDb连接到MS Access数据库(.mdb)。 我的疑问是

 SELECT * FROM ListQueries 

这让我错误

SQL执行错误。

执行的SQL语句:SELECT * FROM ListQueries错误源:Microsoft JET数据库引擎错误消息:无法读取记录; 没有’MSysObjects’的读取权限。

然后我尝试了这个答案 ,但没有帮助。 然后我看到另一个答案说这样做。

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

我不知道如何在我的web project实现它。 按照@HansUp的建议写这样的东西

或者,如果从OleDb连接到Access数据库运行它,它应该从c#开始工作

代码是,

 OleDbConnection con; using (con = new OleDbConnection(Connection.connectionString())) { con.Open(); using (var com = new OleDbCommand("GRANT SELECT ON MSysObjects TO Admin", con)) { com.ExecuteNonQuery(); } using (var com = new OleDbCommand("Select * from ListQueries", con)) { using (var dr = com.ExecuteReader()) { while (dr.Read()) { qryList.Add(SQLReaderExtensions.SafeGetString(dr, "Name")); } dr.Close(); } } con.Close(); } 

第一个com.ExecuteNonQuery()给了我这个错误。

无法打开Microsoft Jet引擎工作组信息文件。

我真的想知道如何授予OleDb调用工作的权限 。 任何建议都会很精彩

PS:BTW,我正在使用MS Access 2010。

我强烈建议您不要使用MS Access系统对象。 还有其他更好的方法来获取信息。

您可以选择ADO和DAO。 你更喜欢哪个? 请注意,在ADO中,action(adSchemaProcedures)和select查询(adSchemaViews)之间存在差异。

例如,

 public static List GetAllQueriesFromDataBase() { var queries = new List(); using (var con = new OleDbConnection(Connection.connectionString())) { con.Open(); var dt = con.GetSchema("Views"); queries = dt.AsEnumerable().Select(dr => dr.Field("TABLE_NAME")).ToList(); } return queries; }