|DataDirectory|的使用


Ado.net2.0中新增加了一個MagicValue,可以在應用程序的配置文件的數據庫鏈接串種使用|DataDirectory| ,例如: 

< connectionStrings >
         < add  name ="ConnectionString"  
             connectionString
="data source=.;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\test.mdf;"  providerName ="System.Data.SqlClient"   />
     </ connectionStrings >


原來一直使用ASP.net開發web應用,asp.net 2.0特有幾個特殊的文件夾App_Data就是其中一個,web應用的數據庫大可以放在這個下面,一直工作的很好。

 

......直到有一天開始寫winform的程序,^_^,當然也想享受這種方便啦,可是發現Windows應用項目中不支持特殊的文件夾,根本沒有這種東西!沒關系咱自己建,還叫App_Data,運行發現數據庫連不上,從錯誤信息中來看,原來Winform中把|DataDirectory|翻譯成了程序啟動目錄apppath\bin\debug(或release),后面不帶App_Data!數據庫文件倒是自動復制到了運行目錄下.

注:使用Debug模式|DataDirectory|將翻譯成:apppath\bin\debug,Release模式翻譯為:apppath\bin\debug\release文件夾.

這樣非常麻煩,難不成我還要在發布的時候更換數據庫存放目錄?
有位我不認識的老外^_^給出了解決辦法:

http://blogs.msdn.com/dataaccess/archive/2005/10/28/486273.aspx

就是在程序啟動時,設置AppDomain.CurrentDomain.setData(“DataDirectory”,我的目錄字符串);該方法重新設置|DataDirectory|的目錄.Winform的程序那當然是在Main函數中了,廢話不說了,我的代碼如下:

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

思想就是去掉調試期間(DEBUG)和發布期間(Release)的不同,這樣要注意的是,發布程序的時候,數據庫也要放到App_Data目錄下面。
下面的代碼起同樣的效果,代碼如下:

            string dataDir = AppDomain.CurrentDomain.BaseDirectory;
             if (dataDir.EndsWith( @" \bin\Debug\ ")
            || dataDir.EndsWith( @" \bin\Release\ "))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName +  " \\App_Data ";
                AppDomain.CurrentDomain.SetData( " DataDirectory ", dataDir);
            }

數據庫連接配置文件與最上面asp.net的web.config配置完全相同,注意在WinForm中並不存在App_Data文件夾這個特殊文件夾,我們只需新建文件夾改名為App_Data,然后將數據庫文件放入該文件夾即可.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM