会员登陆
登录加载中...
超级搜索
栏  目  
类  别  
关键词  
 站内搜索   网络搜索
  
 当前位置:文章首页>>本站原创>>网站编程>>关于数据库路径问题的思考
推荐给你的朋友阅读:

关于数据库路径问题的思考

来源:飞腾设计网 发表日期: 2009-05-09 18:17:56

    由于准备将FeitecCMS Pro版本的会员系统单独制作成独立的管理页面,于是就研究了下数据库路径问题。照原来的思路,是单独在会员子目录中设置一个Conn.asp的数据库连接文件,虽然简单,但存在修改数据库路径时需要多修改一个文件的问题,增加了麻烦程度。

    在经典论坛上搜索一篇文章,作者采用了下面这种方法来处理:

Db = "\db\db.mdb"
Db = server.MapPath("/")& Db

    上面第一句是直接写数据库所在服务器相对地址(“\db\db.mdb”,表示程序安装在WEB空间根目录下,数据库在db子目录中,整个绝对路径比如是:D:\wwwroot\db\db.mdb),第二句则在直接取它在服务器中的实际路径(比如D:\wwwroot\db\db.mdb)。这个方法可以让程序共用一个Conn.asp文件,挺好。但有一个问题,那就是必须填写程序所在目录名称,如“feitec\db\db.mdb”,当程序在本机测试和上传到网站空间时,程序不一定都在WEB空间的根目录下(比如空间的是:D:\wwwroot\db\db.mdb,而本机的是D:\wwwroot\feitec\db\db.mdb),这样子的话,在本机调试修改和上传到空间时,就需要不停地修改数据库相对路径(“Db = "\db\db.mdb"”和“Db = "\feitec\db\db.mdb"”),不太方便。

    经过一番研究,我找到了一个相对智能一点的处理方法,就是让程序根据程序根目录下的Index.asp这个文件来自动判断它在服务器的目录结构,不管它在空间和本机相对服务器的目录结构是否相同,它都会自动作出正确的反映,不影响程序的正常运行,不必再来回地修改。下面看代码:

Dim cc,dd,ee,Db
cc=Server.MapPath("/") ‘取得WEB空间所在服务器的绝对路径
dd=Server.MapPath("Index.asp") '取得程序根目录下Index.asp文件所在服务器的绝对路径
ee=Replace(dd,cc,"")
ee=Right(ee,Len(ee)-1)
'得到程序安装路径目录名称
If UBound(Split(ee,"\")(0))<1 Then
 ee="\"
Else
 ee="\"&Split(ee,"\")(0)&"\"
End If
Db=ee&"data\data.mdb"
Connstr="Provider=Microsoft.Jet.OleDb.4.0;Data Source="&Server.MapPath("/")&Db

    上述代码有一个适用前提,就是程序相对于服务器根目录只能是一层子目录的关系,不能多层,否则出错,不过这已经够用啦。下面是PRO程序中的实际代码:

Dim WebPath,ProgramPath,Path3,DbPath,Db
WebPath=Server.MapPath("/")
ProgramPath=Server.MapPath("Index.asp")
Path3=Replace(ProgramPath,WebPath,"")
Path3=Right(Path3,Len(Path3)-1)
DbPath=""
If UBound(Split(Path3,"\"))>=1 Then DbPath="\"&Split(Path3,"\")(0)
Db=DbPath&"\data\data.mdb"
Connstr="Provider=Microsoft.Jet.OleDb.4.0;Data Source="&Server.MapPath("/")&Db

    兴之所至,最后说一个最佳的方案——采用Application来存放数据库的绝对路径,那是相当地爽啊,呵呵!

    --------------------------------------------------------------------------

    雨城补记:2009-5-10 8:31:53 来个更简单的——

Dim WebPath,ProgramPath,DbPath,Db
WebPath=Server.MapPath("/")
ProgramPath=Server.MapPath("Index.asp")
DbPath=Replace(ProgramPath,WebPath,"")
DbPath=Replace(Replace(DbPath,"\User\","\"),"\user\","\")
DbPath=Replace(Replace(DbPath,"\Index.asp",""),"\index.asp","")
If DbPath="\" Then DbPath=""
Db=DbPath&"\data\data.mdb"
Connstr="Provider=Microsoft.Jet.OleDb.4.0;Data Source="&Server.MapPath("/")&Db

    上述代码没有任意级目录的限制,只要保证user子目录在程序根目录下即可,如果还有其它目录比如admin还需要调用conn.asp文件,再加入\admin\这个字符串的过滤即可。

    2009-5-10 17:29:23,和太阳光商讨,得出了更精简的代码:

DbPath=Server.MapPath(".")
If LCase(Right(DbPath,5))="\user" Then DbPath=Left(DbPath,Len(DbPath)-5)
DbPath=Replace(Replace(DbPath,"\User",""),"\user","")
Db=DbPath&"\data\data.mdb"
Connstr="Provider=Microsoft.Jet.OleDb.4.0;Data Source="&Db

7
0
[作者:雨城 关键词:数据库,路径 录入:raincity 责编:raincity 阅读次数:5497]

相关文章 相关新闻 相关软件 相关教程 公共评论 发表评论

  • ·暂无相关内容
    评论载入中...
    您的称呼  验 证 码   
    您的评论 [ 最多字数:  已用字数:剩余字数:]

     
COPYRIGHT 2003-2010 创意飞腾科技有限公司(The Feitec LTD.) ALL RIGHTS RESERVED .
官方咨询官方咨询4376161 官方咨询526743959 技术支持:FeitecCMS5366464
页面加载时间:265.63ms Powered By:FeitecCMS V4.0(Build1101)
[蜀ICP备05000881]