没有对MSysObject错误的读取权限 [英] No read permission on MSysObject error

查看:133
本文介绍了没有对MSysObject错误的读取权限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆