访问Access 2013数据库的架构 [英] Accessing the Schema of an Access 2013 database

查看:20
本文介绍了访问Access 2013数据库的架构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我尝试读取Access 2013数据库的架构,则收到以下错误:

no read permission on 'MSysRelationships'

现在帮助告诉我

User-level security features are not available in Access apps, web databases, 
or databases that use one of the new file formats (.accdb, .accde, .accdc, .accdr).

=>如何读取该数据库的架构?

编辑:

以下是我在LinqPad中的代码:

var stringBuilder = new OleDbConnectionStringBuilder();
stringBuilder.Provider = "Microsoft.ACE.OLEDB.12.0";
stringBuilder.DataSource = @"C:Recommendations.accdb";

using (var connection = new OleDbConnection(stringBuilder.ToString().Dump()))
{
    connection.Open();
    var schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, null, "TABLE"});
    var sheetName = schemaTable.AsEnumerable().Select(row => row.Field<string>("TABLE_NAME")).First();
    schemaTable.Dump();

    string  namesQuery = "SELECT DISTINCT szRelationship, szReferencedObject, szObject FROM MSysRelationships";
    string  namesQuery2 =  string.Format("select Name, Age from [{0}]", "Users");

    using (var command = new OleDbDataAdapter(namesQuery, connection))
    {
        var dataSet = new DataSet();
        command.Fill(dataSet, sheetName);
        dataSet.Dump();
    }
    connection.Close();
}

推荐答案

在连接字符串中,设置‘User ID=Admin’。

用Access打开数据库,按Ctrl-G组合键打开‘即时’窗口,然后执行以下命令:

CurrentProject.Connection.Execute "GRANT SELECT ON MSysRelationships TO Admin;"
这将授予‘User ID’从该表中读取(选择)的权限。 这同样适用于其他系统表,如‘MSysObjects’。

这篇关于访问Access 2013数据库的架构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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