Server.MapPath将包含CNN.ASP文件的页面文件的所在路径做为了当前路径

F1目录是后台管理程序所在,F2目录下的MYDATA.MDB是数据库文件,CNN.ASP中写明了数据库的连接方式,在其他文件中以包含文件的方式来使用。

 

因为MYDATA.MDBCNN.ASP在同一目录下,因此CNN.ASP中的连接语句是这么写的:

      strCnn = "driver={microsoft  access  driver (*.mdb)};dbq=" & _

     Server.Mappath("mydata.mdb")

 

由于是原来写好的,我没有仔细考虑什么,就直接在F1目录下的INDEX.ASP文件中加入F2语句

<!--#include file="../F2/Cnn.asp" -->

然后运行……嗯???出错了!!

         Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
         [Microsoft][ODBC Microsoft Access Driver]
常见错误 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0x94 Thread 0x9a0  DBC    0x13b0074 Jet'

    错误提示是在OPEN数据库时出错了,没有找到该数据库。难道是数据库路径不对?

 

    将CNN.ASP中的strCnn输出看看先

driver={microsoft access driver (*.mdb)};dbq=C:/F1/mydata.mdb

果然,路径错误!

 

看来,是这个Server.MapPath将包含CNN.ASP文件的页面文件的所在路径做为了当前路径。即如果是F1目录下的INDEX.ASP包含了CNN.ASP,则此时的Server.MapPath"mydata.mdb")就是C:/F1/mydata.mdb;如果F1目录下的NEWS目录下某个文件包含了CNN.ASP,则此时的Server.MapPath"mydata.mdb")就是C:/F1/News/mydata.mdb

经过验证,证明情况确实如上。

 

问题发现了,就该解决了它。由于无法限定在几级目录中要包含CNN.ASP文件,因此使用Server.MapPath就无法获取数据库正确的路径;难道要在所有使用数据库的文件中全部写入该数据库的连接?这是下下策,尽量避免。

 

经过N分钟的思考,终于想出了一个较为划算的方法,就是不使用虚拟路径,先确定根目录的实际路径,然后加入数据库的所在路径。实现代码如下:

 

       Cnn.asp文件:

 

Dim strCurPath,strCurLocation

 

'获取包含该文件的页面文件的虚拟路径

strCurPath=Request.ServerVariables("PATH_INFO")

'获取包含该文件的页面文件的实际路径

strCurLocation=Request.ServerVariables("PATH_TRANSLATED")

 

'转换路径间隔符号(虚拟路径用"/"分隔,实际路径用"/"分隔)

strCurPath=Replace(strCurPath,"/","/")

 

'得到网站根目录的实际路径

strCurLocation=Replace(strCurLocation,strCurPath,"")

 

'指定数据库实际路径

strCurLocation=strCurLocation & "/F2/MyData.mdb"

 

Set Cnn = Server.CreateObject("ADODB.CONNECTION")

'连接到数据库服务器,数据库名称 mydata.mdb

strCnn = "driver={microsoft access driver (*.mdb)};dbq=" & strCurLocation

Cnn.Open strCnn

 

      就这些了,扔砖头吧

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值