没有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; }