2012-02-20 9 views
6

napisałem skrypt do pobierania plików mdb i odczytywania ich z powodu dostawcy OLEDB. Wszystko działa dobrze, ale jeśli spróbuję odczytać z tabeli, zgłasza wyjątek:Ms Access: Nie można odczytać rekordów; nie mam prawa odczytu na [table]

Ms Access: Nie można odczytać rekordu; nie czytać zgodę na tblMytable

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

Zmieniłem uprawnienia bezpośrednio w MS Access dla użytkownika "administrator" i to działa. Problem polega jednak na tym, że skrypt ten uruchamia się dwa razy dziennie i pobiera około 20 plików. Tak więc niemożliwe jest ręczne zmienianie uprawnień.

Czy można zmieniać programowo prawa odczytu do tabeli?

Wielkie dzięki za wszelkie pomysły!

+2

Nie wiem, czy można zmienić prawa, ale jeśli to możliwe, będziesz musiał zalogować się do db jako użytkownik z uprawnieniami administratora lub właściciela. Sugeruję więc, aby zamiast tego spróbować bezpośrednio zalogować się jako taki użytkownik, być może zmieniając ciąg połączenia. Podejrzewam, że do tego będzie potrzebny plik .MDW. –

Odpowiedz

5

Rozwiązałem to przy użyciu pliku system.mdw. Skopiowałem ten plik z "c: \ Users \ Administrator \ AppData \ Roaming \ Microsoft \ Access \" (w Win7) do katalogu aplikacji (App_Data) i zmodyfikowanego ciągu połączenia.

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

Jeżeli nadal nie da się odczytać dane, i wykonać polecenie GRANT:

"GRANT SELECT ON TABLE tblTable TO PUBLIC" 

I to działa :)