2011-05-09 155 views
10

我試圖使用System.Data.OleDb.OleDbConnection連接到Access數據庫文件。我需要以只讀模式連接,因爲另一個應用程序在同一時間使用它。我可以在讀/寫連接到數據庫沒有問題,但似乎無法找到任何地方正確的字符串只讀。只讀連接字符串到訪問數據庫

我已經試過:

商= Microsoft.ACE.OLEDB.12.0;數據源= {0};堅持安全信息= FALSE;模式=讀

提供商= Microsoft.ACE.OLEDB .12.0;數據源= {0};持久安全信息= False;擴展屬性=「ReadOnly = true;」

謝謝。

編輯:

(我應該投入更多的信息,原來的問題)

我可以成功連接到訪問數據庫時,它是本地機器上,但是當我試圖連接到接入數據庫遠程計算機上,使用連接字符串

Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;Mode=Read 

我會得到以下錯誤:

System.Data.OleDb.OleDbException (0x80004005): The Microsoft Office Access database engine cannot open or write to the file '{0}'. It is already opened exclusively by another user, or you need permission to view and write its data. 

我的應用程序在本地系統帳戶下一個Windows服務運行。

+1

嘗試將設置模式設置爲「adModeRead」(不含引號)。 [見MSDN參考](http://msdn.microsoft.com/en-us/library/ms676693(v = vs.85).aspx)。 (不作這個答案,因爲我無法驗證它是否會起作用,只是關閉MSDN數據。) – 2011-05-09 22:09:55

+0

我試着將Mode設置爲'adModeRead',但它引發'System.Data.OleDb.OleDbException(0x80040E73):Format的初始化字符串不符合OLE DB規範。'感謝您的建議。 – Smiffy 2011-05-26 12:22:08

回答

2

我認爲這必須由數據庫管理員控制的用戶權限處理,或者使用您控制的記錄集的不同光標類型來處理。我不認爲連接字符串指定訪問模式,它只是讓你在那裏。 ;)

+0

你是對的。這是一個權限問題。如果我在原始問題中提供更多信息,那麼我認爲它會更加明顯。在我使用提升權限(讀取遠程訪問數據庫的權限)的用戶運行windows服務後,它開始使用連接字符串:'Provider = Microsoft.ACE.OLEDB.12.0; Data Source = {0}; Persist安全信息=假;模式=讀'它只是沒有點擊,我的服務沒有運行與我的用戶有相同的權利。 – Smiffy 2011-05-26 12:39:53

2

真正的問題是,Excel將連接打開,直到文件關閉。

在Excel 2007+中,MaintainConnection設置默認設置爲true。您需要進入vb編輯器並使用代碼將其變爲false。我還沒有看到通過可視界面執行此操作的方法。 即使您將連接字符串設置爲只讀,它也會鎖定訪問數據庫(根據我的經驗)。

數據透視表連接:

Sheets("sheet1").PivotTables("pivottable1").PivotCache.MaintainConnection = False 

對於的QueryTable:

Range("A2").Select 
Selection.ListObject.QueryTable.MaintainConnection = False 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

通過將其設置爲false,該表將連接,運行命令,然後斷開解除鎖定。