2012-02-20 32 views
6

tôi đã viết tập lệnh để tải xuống các tệp mdb và đọc chúng do nhà cung cấp OLEDB do. Tất cả các công trình tốt, nhưng nếu tôi cố gắng đọc từ bảng, nó ném một ngoại lệ:Ms Truy cập: Không thể đọc (các) bản ghi; không có quyền đọc trên [bảng]

Ms Truy cập: Không thể đọc được bản ghi; không có quyền đọc trên tblMytable

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

tôi đã thay đổi điều khoản trực tiếp trong Ms Access cho người sử dụng "administrator" và nó hoạt động. Nhưng vấn đề là, rằng kịch bản này musst chạy hai lần một ngày và nó tải về khoảng 20 tập tin. Vì vậy, nó không thể thay đổi thủ công quyền.

Có thể thay đổi quyền đọc cho bảng một cách có lập trình không?

Cảm ơn rất nhiều vì bất kỳ ý tưởng nào!

+2

Không chắc chắn nếu bạn có thể thay đổi các quyền, nhưng nếu có thể, nó sẽ yêu cầu bạn đăng nhập vào db với tư cách là người dùng có quyền Quản trị viên hoặc Chủ sở hữu. Vì vậy, tôi sẽ đề nghị rằng thay vào đó bạn cố gắng đăng nhập trực tiếp như một người dùng như vậy, có lẽ bằng cách thay đổi chuỗi kết nối của bạn. tôi nghi ngờ rằng bạn sẽ cần tệp .MDW cho điều đó. –

Trả lời

5

Tôi đã giải quyết vấn đề này bằng cách sử dụng tệp system.mdw. Tôi đã sao chép tệp này từ "c: \ Users \ Administrator \ AppData \ Roaming \ Microsoft \ Access \" (trong Win7) vào thư mục ứng dụng (App_Data) và chuỗi kết nối đã sửa đổi.

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

Nếu nó vẫn không thể đọc dữ liệu, tôi thực hiện lệnh cấp:

"GRANT SELECT ON TABLE tblTable TO PUBLIC" 

Và nó hoạt động :)

Các vấn đề liên quan