没有对MSysObject错误的读取权限 [英] No read permission on MSysObject error
问题描述
我正在尝试通过OleDb
连接到MS Access数据库(.mdb).我的查询是
I am trying to connect to an MS Access database (.mdb) through OleDb
. My query is
SELECT * FROM ListQueries
这会给我带来错误
SQL执行错误.
SQL Execution Error.
已执行的SQL语句:SELECT * FROM ListQueries 错误源:Microsoft JET数据库引擎 错误消息:无法读取记录;没有对"MSysObjects"的读取权限.
Executed SQL Statement: SELECT * FROM ListQueries Error Source: Microsoft JET Database Engine Error Message: Records cannot be read; No read permission on 'MSysObjects'.
然后我尝试了此答案,但是它没有帮助.然后我看到另一个回答说要这样做.
Then I tried this answer, but it did not help. Then I saw another answer says to do this.
strDdl = "GRANT SELECT ON MSysObjects TO Admin;"
CurrentProject.Connection.Execute strDdl
我不知道如何在我的web project
中实现它.根据 @HansUp
I do not know how to implement that in my web project
. Was writing something like this as per this suggestion by @HansUp
或者,如果从OleDb连接到Access数据库运行它,它应该可以在c#中工作
Alternatively, it should work from c# if you run it from an OleDb connection to the Access db
代码是
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引擎工作组信息文件.
Cannot open the Microsoft Jet engine workgroup information file.
我真的很想知道如何授予OleDb通话权限.任何建议都会很棒
I would really like to know how to grant permission for an OleDb call to work. Any suggestions will be wonderful
P.S:顺便说一句,我正在使用MS Access 2010.
P.S: BTW, I am using MS Access 2010.
推荐答案
我强烈建议您不要使用MS Access系统对象.还有其他更好的方法来获取信息.
I strongly suggest that you do not use MS Access system objects. There are other and better ways to get the information.
您可以选择 ADO 和DAO.你更喜欢哪个?请注意,在ADO中,操作(adSchemaProcedures)和选择查询(adSchemaViews)之间是有区别的.
You have a choice of ADO and DAO. Which would you prefer? Note that in ADO there is a difference between action (adSchemaProcedures) and select queries (adSchemaViews).
例如,
public static List<string> GetAllQueriesFromDataBase()
{
var queries = new List<string>();
using (var con = new OleDbConnection(Connection.connectionString()))
{
con.Open();
var dt = con.GetSchema("Views");
queries = dt.AsEnumerable().Select(dr => dr.Field<string>("TABLE_NAME")).ToList();
}
return queries;
}
这篇关于没有对MSysObject错误的读取权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!