2

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).

=>そのDBのスキーマを読み取るにはどうすればよいですか?

編集 :

これが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();
}
4

2 に答える 2

2

ここでの同様の以前の質問への回答から判断すると、OleDb接続を介してAccessのシステムテーブルを直接読み取ることはできないと思います。ただし、メソッドを介して必要な情報を取得できる場合がありますOleDbConnection.GetSchema(詳細はこちら)。

于 2013-03-19T18:53:56.620 に答える
2

接続文字列で、'User Id=Admin' を設定します。

Access でデータベースを開き、Ctrl-G を押して [Immediate] ウィンドウを表示してから、次のコマンドを実行します。

CurrentProject.Connection.Execute "GRANT SELECT ON MSysRelationships TO Admin;"

これにより、そのテーブルから読み取る (SELECT) 権限が「ユーザー ID」に与えられます。「MSysObjects」などの他のシステム テーブルにも同じことが当てはまります。

于 2017-06-29T10:40:18.283 に答える