CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

这样行吗?望大哥们帮忙

楼主audny(小狐狸)2001-11-28 11:14:43 在 Web 开发 / ASP 提问

我想用一个应用级变量记录数据库连接,便可以在整个应用程序中用到了  
  这样写老是出错,请问该怎么做呢?  
   
  <SCRIPT   LANGUAGE=VBScript   RUNAT=Server>  
  Sub   Application_OnStart  
          'Active   a   odbc   data   source   connection  
          Dim   conData   'as   Connection  
          Set   conData=Server.CreateObject("ADODB.Connection")  
          conData.Open   "Driver={Microsoft   Access   Driver};   DBQ="   &   _  
                                    Server.MapPath("enterprise.mdb")  
          Application("conData")=conData  
          conData.Close  
          Set   conData=nothing  
  End   Sub  
   
   
  Sub   Application_OnEnd  
           
          Application("conData")=Null      
  End   Sub  
   
  </SCRIPT> 问题点数:59、回复次数:5Top

1 楼rouser(流淌的小溪)回复于 2001-11-28 11:16:43 得分 0

是不是要把  
          conData.Close  
          Set   conData=nothing  
  放到  
          Sub   Application_OnEnd  
  中去呢?Top

2 楼balloy()回复于 2001-11-28 11:22:14 得分 59

Application("conData")=conData  
  conData.Close  
  Set   conData=nothing  
   
   
  你把conData立即施放了,当然不会有用。同意小火的解决方案。  
   
  另外,我以前从别的地方看来的,一般不推荐将conn对象放在Application中。如下:  
  ----------------------------------------  
  技巧   5:不要将数据库连接缓存在   Application   或   Session   对象中    
  缓存   ADO   连接通常是很糟糕的策略。如果一个   Connection   对象存储在   Application   对象中,并在所有的页面中使用,那么所有页面将争抢这一连接。如果   Connection   对象存储在   ASP   Session   对象中,那么将为每个用户创建数据库连接。这就会使连接池的优势荡然无存,并给   Web   服务器和数据库带来不必要的压力。   可以不缓存数据库连接,而是在使用   ADO   的每个   ASP   页面中创建和删除   ADO   对象。这是很有效的,因为   IIS   内嵌了数据库连接池。更准确地说,IIS   自动启用   OLEDB   和   ODBC   连接池。这就能确保在每个页面上创建和删除连接将是有效的。   因为连接的记录集存储一个到数据库连接的引用,所以您不应将连接的记录集缓存在   Application   或   Session   对象中。但是,您可以安全地缓存断开连接的记录集,它们不保存到其数据连接的引用。要断开记录集连接,执行下面的两个步骤:   Set   rs   =   Server.CreateObject(?ADODB.RecordSet?)rs.CursorLocation   =   adUseClient   '   step   1'   Populate   the   recordset   with   datars.Open   strQuery,   strProv'   Now   disconnect   the   recordset   from   the   data   provider   and   data   sourcers.ActiveConnection   =   Nothing   '   step   2有关连接池的更详细信息,可以在   ADO   和   SQL   Server   参考资料中找到。    
   
  Top

3 楼karma(无为MS MVP)回复于 2001-11-28 11:38:43 得分 0

<SCRIPT   LANGUAGE=VBScript   RUNAT=Server>  
  Sub   Application_OnStart  
          'Active   a   odbc   data   source   connection  
          Dim   conData   'as   Connection  
          Set   conData=Server.CreateObject("ADODB.Connection")  
          conData.Open   "DRIVER={Microsoft   Access   Driver   (*.mdb)};   DBQ="   &   Server.MapPath("enterprise.mdb")  
          set   Application("conData")=conData  
          Set   conData=nothing  
  End   Sub  
   
   
  Sub   Application_OnEnd  
          Application("conData").close  
          set   Application("conData")=nothing    
  End   Sub  
   
  </SCRIPT>  
   
  warning:   storing   a   connection   object   in   an   application   variable   is   bad    
  Top

4 楼rouser(流淌的小溪)回复于 2001-11-28 11:49:15 得分 0

to   balloy()  
  不将记录集缓冲  
  只是缓冲库连接  
  在中个应用中只有唯一的  
  一个库连接存在于Application变量中  
  应该是节约资源的呀  
  是不是和包含文件的效率相当呀?Top

5 楼balloy()回复于 2001-11-28 21:02:05 得分 0

to   rouser(小火):  
  如果一个   Connection   对象存储在   Application   对象中,并在所有的页面中使用,那么所有页面将争抢这一连接。如果   Connection   对象存储在   ASP   Session   对象中,那么将为每个用户创建数据库连接。这就会使连接池的优势荡然无存,并给   Web   服务器和数据库带来不必要的压力。   可以不缓存数据库连接,而是在使用   ADO   的每个   ASP   页面中创建和删除   ADO   对象。这是很有效的,因为   IIS   内嵌了数据库连接池。更准确地说,IIS   自动启用   OLEDB   和   ODBC   连接池。这就能确保在每个页面上创建和删除连接将是有效的。   因为连接的记录集存储一个到数据库连接的引用,所以您不应将连接的记录集缓存在   Application   或   Session   对象中。  
   
  ------------------------------------------------------------------  
  上面这些话都是我拷贝过来的,其实,我以前也想过将连接对象存在于Application变量中。  
  不过,上面的话虽然不是我想的,我认为还是有道理的。如果库连接存在于Application变量中,所有页面将争抢这一连接(你可以假设一下所有的页面都用到了conn.BeginTrans等操作),虽然IIS的内部实现我并不太了解,不过我可以想象这样可能效率不高。  
   
  另外,在InterDev中建立一个工程,它的Global.asa文件中就是把连接字符串放在Application对象中,而不是连接对象,可能是有一定道理的。Top

相关问题

  • 又是数据库连接的问题,大哥们看看帮帮我行吗?
  • 散发阿,初来咋到,请大哥们介绍一些.net的学习网站行吗?E文或者C文都可以,谢谢啦!
  • 急救,大哥们
  • 大哥们~~求助~~
  • 小弟刚涉及socket不久,望大哥们指点。
  • 初学者的困惑,望大哥们帮忙解决啊
  • 请教几个SQL语句,望大哥们指点!
  • java简单问题!初学,望大哥们指教!
  • 大哥们HELP ME呀!
  • 大哥们教教我

关键词

  • 连接
  • 数据库
  • 页面
  • ado
  • application
  • iis
  • asp
  • condata
  • 对象
  • 变量

得分解答快速导航

  • 帖主:audny
  • balloy

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo