使用|DataDirectory| 的烦恼
生活随笔
收集整理的這篇文章主要介紹了
使用|DataDirectory| 的烦恼
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Ado.net2.0中新增加了一個(gè)MagicValue,可以在應(yīng)用程序的配置文件的數(shù)據(jù)庫(kù)鏈接串種使用|DataDirectory| ,例如
?<connectionStrings>
????????<add?name="ConnectionString"?connectionString="data??source=.\SQLEXPRESS;Integrated??Security=SSPI;AttachDBFilename=|DataDirectory|data.mdf;User??Instance=true"?providerName="System.Data.SqlClient"?/>
?</connectionStrings> 原來(lái)一直使用ASP.net開(kāi)發(fā)web應(yīng)用,asp.net 2.0特有幾個(gè)特殊的文件夾App_Data就是其中一個(gè),web應(yīng)用的數(shù)據(jù)庫(kù)大可以放在這個(gè)下面,一直工作的很好。......知道有一天開(kāi)始寫(xiě)winform的程序,^_^,當(dāng)然也想享受這種方便啦,可是發(fā)現(xiàn)Windows應(yīng)用項(xiàng)目中不支持特殊的文件夾,根本沒(méi)有這種東西!沒(méi)關(guān)系咱自己建,還叫App_Data,運(yùn)行發(fā)現(xiàn)數(shù)據(jù)庫(kù)連不上,從錯(cuò)誤信息中來(lái)看,原來(lái)Winform中把|DataDirectory|翻譯成了程序啟動(dòng)目錄apppath\bin\debug(或release),后面不帶App_Data!數(shù)據(jù)庫(kù)文件倒是自動(dòng)復(fù)制倒了運(yùn)行目錄下(帶著App_Data的目錄)沒(méi)關(guān)系,咱自己加上,把上面的鏈接串改成這樣
?<connectionStrings>
????????<add?name="ConnectionString"?connectionString="data??source=.\SQLEXPRESS;Integrated??Security=SSPI;AttachDBFilename=|DataDirectory|App_Data\data.mdf;User??Instance=true"?providerName="System.Data.SqlClient"?/>
?</connectionStrings> 一運(yùn)行,哈哈,鏈接成功了。試著錄入幾個(gè)數(shù)據(jù),保存,ok沒(méi)問(wèn)題!退出,再運(yùn)行,一看傻眼了,剛才錄入的數(shù)據(jù)不見(jiàn)了!研究半天明白了,原來(lái)每次運(yùn)行,.net都自動(dòng)復(fù)制了一份數(shù)據(jù)庫(kù)到運(yùn)行目錄,所以上次的數(shù)據(jù)就都丟失了!想到兩個(gè)解決辦法,1,把數(shù)據(jù)庫(kù)的屬性中的“復(fù)制到輸出目錄”設(shè)置為“不復(fù)制”,這樣Debug和Release編譯版本各用各的數(shù)據(jù)庫(kù),原始的數(shù)據(jù)庫(kù)始終是空的!(好像也有用)2,鏈接到程序目錄中的App_Data下的數(shù)據(jù)庫(kù)。由于對(duì)第一種解決辦法,自我感覺(jué)有點(diǎn)兒迷惑和Webform中的經(jīng)驗(yàn)不一致,所以決定用第二種,Google了一下,有位我不認(rèn)識(shí)的老外^_^給出了解決辦法http://blogs.msdn.com/dataaccess/archive/2005/10/28/486273.aspx,就是在程序啟動(dòng)時(shí),設(shè)置AppDomain.CurrentDomain.setData(“DataDirectory”,我的目錄字符串);Winform的程序那當(dāng)然是在Main函數(shù)中了,廢話(huà)不說(shuō)了,我的代碼如下
string?p?=?AppDomain.CurrentDomain.BaseDirectory;
????????????if?(p.IndexOf("\\bin\\")?>?0)
????????????{
????????????????if?(p.EndsWith("\\bin\\Debug\\"))
????????????????????p?=?p.Replace("\\bin\\Debug",?"");
????????????????if?(p.EndsWith("\\bin\\Release\\"))
????????????????????p?=?p.Replace("\\bin\\Release",?"");
????????????}
????????????if?(!p.EndsWith("App_Data\\"))
????????????????p?=?p?+?"App_Data\\";
????????????AppDomain.CurrentDomain.SetData("DataDirectory",?p); 思想就是去掉調(diào)試期間和生產(chǎn)期間的不同,這樣要注意的是,發(fā)布程序的時(shí)候,數(shù)據(jù)庫(kù)也要放到App_Data目錄下面。
?<connectionStrings>
????????<add?name="ConnectionString"?connectionString="data??source=.\SQLEXPRESS;Integrated??Security=SSPI;AttachDBFilename=|DataDirectory|data.mdf;User??Instance=true"?providerName="System.Data.SqlClient"?/>
?</connectionStrings> 原來(lái)一直使用ASP.net開(kāi)發(fā)web應(yīng)用,asp.net 2.0特有幾個(gè)特殊的文件夾App_Data就是其中一個(gè),web應(yīng)用的數(shù)據(jù)庫(kù)大可以放在這個(gè)下面,一直工作的很好。......知道有一天開(kāi)始寫(xiě)winform的程序,^_^,當(dāng)然也想享受這種方便啦,可是發(fā)現(xiàn)Windows應(yīng)用項(xiàng)目中不支持特殊的文件夾,根本沒(méi)有這種東西!沒(méi)關(guān)系咱自己建,還叫App_Data,運(yùn)行發(fā)現(xiàn)數(shù)據(jù)庫(kù)連不上,從錯(cuò)誤信息中來(lái)看,原來(lái)Winform中把|DataDirectory|翻譯成了程序啟動(dòng)目錄apppath\bin\debug(或release),后面不帶App_Data!數(shù)據(jù)庫(kù)文件倒是自動(dòng)復(fù)制倒了運(yùn)行目錄下(帶著App_Data的目錄)沒(méi)關(guān)系,咱自己加上,把上面的鏈接串改成這樣
?<connectionStrings>
????????<add?name="ConnectionString"?connectionString="data??source=.\SQLEXPRESS;Integrated??Security=SSPI;AttachDBFilename=|DataDirectory|App_Data\data.mdf;User??Instance=true"?providerName="System.Data.SqlClient"?/>
?</connectionStrings> 一運(yùn)行,哈哈,鏈接成功了。試著錄入幾個(gè)數(shù)據(jù),保存,ok沒(méi)問(wèn)題!退出,再運(yùn)行,一看傻眼了,剛才錄入的數(shù)據(jù)不見(jiàn)了!研究半天明白了,原來(lái)每次運(yùn)行,.net都自動(dòng)復(fù)制了一份數(shù)據(jù)庫(kù)到運(yùn)行目錄,所以上次的數(shù)據(jù)就都丟失了!想到兩個(gè)解決辦法,1,把數(shù)據(jù)庫(kù)的屬性中的“復(fù)制到輸出目錄”設(shè)置為“不復(fù)制”,這樣Debug和Release編譯版本各用各的數(shù)據(jù)庫(kù),原始的數(shù)據(jù)庫(kù)始終是空的!(好像也有用)2,鏈接到程序目錄中的App_Data下的數(shù)據(jù)庫(kù)。由于對(duì)第一種解決辦法,自我感覺(jué)有點(diǎn)兒迷惑和Webform中的經(jīng)驗(yàn)不一致,所以決定用第二種,Google了一下,有位我不認(rèn)識(shí)的老外^_^給出了解決辦法http://blogs.msdn.com/dataaccess/archive/2005/10/28/486273.aspx,就是在程序啟動(dòng)時(shí),設(shè)置AppDomain.CurrentDomain.setData(“DataDirectory”,我的目錄字符串);Winform的程序那當(dāng)然是在Main函數(shù)中了,廢話(huà)不說(shuō)了,我的代碼如下
string?p?=?AppDomain.CurrentDomain.BaseDirectory;
????????????if?(p.IndexOf("\\bin\\")?>?0)
????????????{
????????????????if?(p.EndsWith("\\bin\\Debug\\"))
????????????????????p?=?p.Replace("\\bin\\Debug",?"");
????????????????if?(p.EndsWith("\\bin\\Release\\"))
????????????????????p?=?p.Replace("\\bin\\Release",?"");
????????????}
????????????if?(!p.EndsWith("App_Data\\"))
????????????????p?=?p?+?"App_Data\\";
????????????AppDomain.CurrentDomain.SetData("DataDirectory",?p); 思想就是去掉調(diào)試期間和生產(chǎn)期間的不同,這樣要注意的是,發(fā)布程序的時(shí)候,數(shù)據(jù)庫(kù)也要放到App_Data目錄下面。
總結(jié)
以上是生活随笔為你收集整理的使用|DataDirectory| 的烦恼的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安装与配置SVN
- 下一篇: DateChooser ASP.NET