0

我有一個使用數據訪問層的n層應用程序。在數據訪問層項目設置中,有一個連接字符串。該字符串包含文本「Data Source = |%LOCALAPPDATA%| \ Some Folder \ File.ext」但是當應用程序運行(並且該文件在那裏)時,我得到一個OleDbException「不是有效的文件」。如何將%LOCALAPPDATA%添加到連接字符串設置?

我寫錯了字符串,還是由於其他問題?

另外,如果用戶有Windows XP,這個目錄會指向什麼?我正在做安裝程序,安裝Access數據庫到這個特定的文件夾,但我不認爲XP有一個「LocalAppData」,但只是「AppData」。

+0

奇怪這兩個管道,你確認字符串不是| DataDirectory |? – Steve

+0

哦,我確定。我試圖將Access數據庫安裝到| DataDirectory |中但是當應用程序安裝時,它默認對該文件沒有修改權限,並且收到權限錯誤。我讀到這是AppData目錄更好用的,所以我現在讓安裝程序將數據庫移動到該目錄,並且需要對其進行測試。 –

回答

2

您可以獲取和使用此代碼

string str = Environment.ExpandEnvironmentVariables("%LOCALAPPDATA%"); 
string expandedConString = "Data Source=|%LOCALAPPDATA%|\Some Folder\File.ext".Replace("|%LOCALAPPDATA%|", str); 

替換預定義的環境變量,順便說一句,在

string str = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

相同的值%LOCALAPPDATA%環境變量指向不過我覺得這機器是有點笨拙。更好的方法是使用|DataDirectory|替換字符串。你寫你的連接字符串與標準

"Data Source=|DataDirectory|\Some Folder\File.ext" 

然後在您的應用程序,所有的數據訪問代碼更改當前值|DataDirectory|之前讀取配置設置,並與

string myDBPath = ConfigurationManager.AppSettings["PathToDatabase"].ToString(); 
AppDomain.CurrentDomain.SetData("DataDirectory", myDBPath); 

在這種改變其值方式您的應用程序將更加靈活,並將輕鬆適應您的客戶無疑將構成的不同外部約束。
(當然你的安裝應選擇或配置目錄,你有你的數據庫文件的完全讀/寫權限)

爲了完整

Where is DataDirectory

+0

看起來不錯,但ConfigurationManager位於何處?順便說一句,這是一個桌面應用程序。 –

+0

Nevermind,將參考添加到System.Configuration中,現在可以訪問它。謝謝。 –

+0

使用System.Configuration(並添加引用System.Configuration.dll)請參閱http://msdn.microsoft.com/en-us/library/ms134260.aspx – Steve