好多朋友被ACCESS資料庫在.net程式中相對路徑的問題困擾,搞得每次移動程式都要去修改web.config
中資料庫連接字串的資料庫路徑。
好多人的web.config中的寫法如下:
<appSettings>
<add key="OLEDBCONNECTIONSTRING" value="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:webApp_DataData.mdb)"></add>
</appSettings>
程式中這樣寫:
MyConn = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings["OLEDBCONNECTIONSTRING"]);//註解一下:VS2005和VS2003中的ConfigurationSettings寫法不一樣,具體區別自己查吧
這樣程式執行時間經常提示諸如以下的錯誤:
'C:WINDOWSsystem32~App_DataData.mdb'不是一個有效的路徑。 確定路徑名稱拼字是否正確,以及是否連接到檔案存放的伺服器。 Data Source=~App_DataData.mdb
就算用絕對路徑正確,那麼移植程式時還要去修改web.config,所以比較麻煩。
也有在web.config中使用像ASP那樣的Server.MapPath取資料庫路徑的,但web.config不認識Server.MapPath,此方法也行不通。
後來透過摸索、參考其它程序,總結出如下方法,可以方便的移植程序路徑而不必再去修改ACCESS資料庫路徑。
我在web.config中的寫法如下:
<appSettings>
<add key="SQLConnString" value="provider=microsoft.jet.oledb.4.0;data source="/>
<add key="dbPath" value="~/App_Data/mydata.mdb"/>
</appSettings>
程式中的資料存取類別中我把"SQLConnString"和"dbPath"取出來連接成一個字串"CONN_STRING_NON_DTC"
public static readonly string CONN_STRING_NON_DTC = System.Configuration.ConfigurationManager.AppSettings["SQLConnString"].ToString() + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["dbPath"]) + "dbPath";
這是VS2005中的寫法我把CONN_STRING_NON_DTC定義成static readonly是為了使用方便。
好了,這樣就可以隨便移植你的程式而不用關心資料庫的路徑了,一勞永逸啊^_^,適合我這樣的懶人!