风舞残阳 2008-4-2 13:43
Access数据库在asp.net程序中相对路径的解决方法
好多朋友被ACCESS[wiki]数据库[/wiki]在.net[wiki]程序[/wiki]中相对路径的问题困扰,搞得每次移动程序都要去修改web.config
中数据库连接字符串的数据库路径。
好多人的web.config中的写法如下:
%26lt;appSettings%26gt;
%26lt;addkey="OLEDBCONNECTIONSTRING"value="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:\web\App_Data\Data.mdb)"%26gt;%26lt;/add%26gt;
%26lt;/appSettings%26gt;
程序中这样写:
MyConn=newOleDbConnection(System.Configuration.ConfigurationManager.AppSettings["OLEDBCONNECTIONSTRING"]);//注释一下:VS2005和VS2003中的ConfigurationSettings写法不一样,具体区别自己查吧
这样程序运行时经常提示诸如以下的错误:
'C:\WINDOWS\system32\"\App_Data\Data.mdb'不是一个有效的路径。确定路径名称拼写是否正确,以及是否连接到文件存放的[wiki]服务器[/wiki]。DataSource="\App_Data\Data.mdb
就算用绝对路径正确,那么移植程序时还要去修改web.config,所以比较麻烦。
也有在web.config中使用象ASP那样的Server.MapPath取数据库路径的,但web.config不认识Server.MapPath,此方法也行不通。
后来通过摸索、参考其它程序,总结出如下方法,可以方便的移植程序路径而不必再去修改ACCESS数据库路径。
我在web.config中的写法如下:
%26lt;appSettings%26gt;
%26lt;addkey="SQLConnString"value="provider=microsoft.jet.oledb.4.0;datasource="/%26gt;
%26lt;addkey="dbPath"value=""/App_Data/mydata.mdb"/%26gt;
%26lt;/appSettings%26gt;
程序中的数据访问[wiki]类[/wiki]中我把"SQLConnString"和"dbPath"取出来连接成一个字符串"CONN_STRING_NON_DTC"
publicstaticreadonlystringCONN_STRING_NON_DTC=System.Configuration.ConfigurationManager.AppSettings["SQLConnString"].ToString()+System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["dbPath"])+";";
这是VS2005中的写法
我把CONN_STRING_NON_DTC定义成staticreadonly是为了使用方便。
好了,这样就可以随便移植你的程序而不用关心数据库的路径了,一劳永逸啊^_^,适合我这样的懒人!