8

私は、mdb ファイルをダウンロードして、OLEDB プロバイダーのためにそれらを読み取るためのスクリプトを作成しました。すべて正常に動作しますが、テーブルから読み取ろうとすると、例外がスローされます:

Ms アクセス: レコードを読み取ることができません。tblMytable に対する読み取り権限がありません

 var cmd = new OleDbCommand("SELECT * FROM tblMytable", conn);
 var reader = cmd.ExecuteReader();

ユーザー「管理者」のアクセス許可を Ms Access で直接変更したところ、機能しました。しかし問題は、このスクリプトを 1 日に 2 回実行する必要があり、約 20 個のファイルをダウンロードすることです。したがって、アクセス許可を手動で変更することは不可能です。

テーブルの読み取り権限をプログラムで変更することはできますか?

アイデアをありがとう!

4

1 に答える 1

8

system.mdw ファイルを使用してこれを解決しました。このファイルを "c:\Users\Administrator\AppData\Roaming\Microsoft\Access\" (Win7 の場合) からアプリケーション ディレクトリ (App_Data) にコピーし、接続文字列を変更しました。

string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database.MDB;Persist Security Info=True;Jet OLEDB:System Database=|DataDirectory|\System.MDW;

var conn = new OleDbConnection(connectionString);

それでもデータを読み取ることができない場合は、grant コマンドを実行します。

"GRANT SELECT ON TABLE tblTable TO PUBLIC"

そしてそれは動作します:)

于 2012-02-28T08:17:05.210 に答える