没有MSysObject错误的读取权限

nav*_*een 5 c# oledb ms-access

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

SELECT * FROM ListQueries
Run Code Online (Sandbox Code Playgroud)

这让我误解了

SQL执行错误.

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

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

strDdl = "GRANT SELECT ON MSysObjects TO Admin;"
CurrentProject.Connection.Execute strDdl
Run Code Online (Sandbox Code Playgroud)

我不知道如何实现这一点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();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Fio*_*ala 8

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

您可以选择ADO和DAO.你更喜欢哪个?请注意,在ADO中,action(adSchemaProcedures)和select查询(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;
}
Run Code Online (Sandbox Code Playgroud)