2014-05-13 36 views
1

我想在C#中運行鍼對Access 2007數據庫以下查詢:針對Access中的(隱藏)系統表運行C#查詢?

OleDbCommand command = new OleDbCommand(); 
command.Connection = connect; 
command.CommandText = "SELECT * FROM MSysQueries"; 
OleDbDataReader reader = command.ExecuteReader(); 

而我得到的錯誤:

Record(s) cannot be read; no read permission on 'MSysQueries'.

是否有可能做到這一點?如果是這樣如何?我的印象是有可能做到這一點,但我不完全確定。

+0

還有一個類似的問題[這裏](http://stackoverflow.com/q/19971082/2144390)。它的答案有幫助嗎? –

+0

這是同樣的問題,但我似乎無法得到解決方案的工作。 – Ben

+0

你是否按照[這裏](http://stackoverflow.com/a/19971579/2144390)的說明執行'GRANT SELECT MSysQueries TO Admin'?我只是試了一下,它爲我工作。 –

回答

4

正如類似的問題here提到,要解決的

Record(s) cannot be read; no read permission on 'MSysQueries'.

錯誤,您需要授予SELECT權限設置爲默認用戶「管理」與命令

GRANT SELECT ON MSysQueries TO Admin 

可以執行來自.NET OleDbConnection的SQL語句,但爲了這樣做,您需要在連接字符串中指定默認工作組信息文件(System.mdw)的位置,如下所示:

myConnectionString = 
     @"Provider=Microsoft.ACE.OLEDB.12.0;" + 
     @"Data Source=C:\Users\Public\Database1.accdb;" + 
     @"Jet OLEDB:System database=C:\Users\Gord\AppData\Roaming\Microsoft\Access\System.mdw;"; 

到的.mdw文件路徑可以從Windows註冊表中讀取值

Key: 
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Access\Access Connectivity Engine\Engines 

Value: 
SystemDB 

(在上面的項值14.0是Access 2010中訪問的其他版本也將有不同的檢索值)。

+0

我知道這是從另一個問題的過程的主旨,但對我的生活我可以不遵循其他答案。這很容易遵循,簡明扼要,謝謝。 – Ben

+0

我同意,很好的答案。 Access 2007是... \ Office \ 12.0 \ Access \ ....我認爲Access 2003是8.0 – FreeText

+0

謝謝Gord!我希望我能早日看到這一點,會節省一小時的搜索時間「無法打開Microsoft Access數據庫引擎工作組信息文件」。 –

0

可以提供訪問您在Access 2007中這樣做:

工具菜單 - >安全 - >用戶和組權限。在MSysObjects表上向Admin用戶授予「讀取數據」權限。

但是您必須確保MSysObjects因安全原因未被鎖定。

+0

我實際上在Access 2010中找不到工具菜單? – Ben

+0

「工具」菜單似乎只對.mdb文件可見。查看另一個答案中引用的類似問題。 ([鏈接])(http://stackoverflow.com/questions/19971082/no-read-permission-on-msysobjects)) – FreeText