[原创] Access数据库在asp.net程序中相对路径的解决方法

好多朋友被ACCESS数据库在.net程序中相对路径的问题困扰,搞得每次移动程序都要去修改web.config

中数据库连接字符串的数据库路径。

好多人的web.config中的写法如下:


 

<appSettings>
<add key="OLEDBCONNECTIONSTRING" value="Provider=Microsoft.Jet.OLEDB.4.0;Data

Source=E:\web\App_Data\Data.mdb)"></add>
</appSettings>


程序中这样写:


 

MyConn = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings["OLEDBCONNECTIONSTRING"]);//注释一下:VS2005和VS2003中的ConfigurationSettings写法不一样,具体区别自己查吧

这样程序运行时经常提示诸如以下的错误:
'C:\WINDOWS\system32\~\App_Data\Data.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。 Data Source=~\App_Data\Data.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"]) + ";";
这是VS2005中的写法

我把CONN_STRING_NON_DTC定义成static readonly是为了使用方便。
好了,这样就可以随便移植你的程序而不用关心数据库的路径了,一劳永逸啊^_^,适合我这样的懒人!

posted @ 2006-11-22 09:53 碧血黄沙.NET 阅读(4362) 评论(14) 编辑 收藏

 回复 引用 查看   
#1楼2006-11-22 10:05 | xiao_p      
这东西不需要放首页吧 :p
 回复 引用 查看   
#2楼2006-11-22 10:06 | Jason Cui      
我的做法是在Config里面使用{0}参数,在程序里面取当前程序的运行路径,填进去。
这样即使这个Dll被用在桌面程序里,也不会有问题。

 回复 引用 查看   
#3楼[楼主]2006-11-22 10:07 | 碧血黄沙      
挪到.net新手区了
 回复 引用 查看   
#4楼2006-11-22 10:26 | Klesh Wong      
显然Jason Cui的方法科学多了。
 回复 引用 查看   
#5楼2006-11-22 11:07 | Teddy's Knowledge Base      
在NBearV3中,标准的Access的ConnectionString中可以直接使用.\或~\或|DataDirectory|\开头的相对路径格式的mdb路径。
 回复 引用   
#6楼2007-04-02 12:56 | Happy [未注册用户]
可以直接用Page.MapPath("**.mdb")取得绝对路径吧,需要那么麻烦吗
 回复 引用   
#7楼2007-05-31 11:54 | 路过[未注册用户]
太感谢你了!!!!
 回复 引用   
#8楼2008-10-14 22:02 | keeprunning[未注册用户]
实在是不是一般的感谢你啊!
 回复 引用   
#9楼2008-11-27 09:58 | andu[未注册用户]
谢谢,引用了你的方法,并修改后可以适用于mssql数据库了。
 回复 引用   
#10楼2008-12-09 09:46 | wjj[未注册用户]
@andu
mssql数据库本身就没有路径之说,但本文的确实方法适合mssql数据库

 回复 引用   
#11楼2009-03-17 11:53 | 潘任贵[未注册用户]
数据访问层怎么没有这个呀!System.Web.HttpContext,点不出来。
 回复 引用 查看   
#12楼[楼主]2009-03-18 10:05 | 碧血黄沙.NET      
--引用--------------------------------------------------
潘任贵: 数据访问层怎么没有这个呀!System.Web.HttpContext,点不出来。
--------------------------------------------------------

需要在项目中添加对System.Web的引用