精华区 [关闭][返回]

当前位置:月光软件>>讨论区精华>>〖软件开发〗>>● ASP>>★ASP的关联★>>关于数据库连接的一点浅见

主题:关于数据库连接的一点浅见
发信人: dongbao()
整理人: dongbao(2000-10-27 23:19:19), 站内信件
    最近经常见到有人问如何连接数据库效率最高,耗费资源最低,在这里我谈
一下我的看法。连接数据库不外乎三种方法,一种是将数据库连接放到session变
量中,一种是放到application变量中,再一种就是在页面中使用时打开,用完立
刻关闭。尽管前两种方法用起来比较方便,但应该说第三种方法是最好的,下面
我分别讲一下,由于水平所限,错误难免,请大家指正。

    session:用session的缺点显而易见,服务器会为每一个用户创建一个数据连
接,直到这个用户离开或session超时,这样就会大大浪费服务器资源,如果访问
量大的话,系统资源就会被耗尽,或者数据库连结数到达上界,就会造成程序出
错。

    application:既然用session会出现这么多问题,那是不是用application最
节省资源呢?只建立一条连接就够了,大家共用。不是这样的,如果无论多少用
户只建立一条连接,同样会带来很多问题,首先是如果访问量大,一条连接肯定
无法满足需要,同样会造成程序出错;其次,如果你用了私人临时表或光标,那
麻烦就来了。私人临时表和光标只对当前连接可见,可是如果大家都用一条连接
,那么就会产生冲突,造成程序错误。

    最后一种方法(即开即用即关):这是最好的一种方法,原因如下:打开数据
库连接,使用完立即关闭,是一种良好的编程习惯,其实不仅是数据库连接对象
如此,所有对象也就是说server.creatobject出来的对象理论上生存期都不能超
过0.01秒(国外有人做过测试的,不是我信口开河),如果超过就会对效率产生影
响。那么也许你会说每个页面都会打开一个连接,那打开的连接数不是更多,效
率不是更低吗?错了,讲到这里就不能不提一下连接池(也叫共享池的概念),
现在的大型数据库包括odbc本身都提供连接池的功能,他的基本原理是这样的,
一个连接申请关闭时系统并不是真的关闭它,而是将它放到共享池中,如果这时
有相同的连接请求,系统就会把这个连接从共享池中取出来给用户,这样就省去
了关闭和打开连接的系统开销,只有当这个连接长时间不被请求时并且共性池中
的连接饱和,系统才会真的干掉它。明白这个道理,你就明白尽管你在程序中请
求打开和关闭连接,但系统并不一定要增加这些开销的。

    道理讲完了,现在给例子。下面是打开和关闭数据库连接的两个函数,你可
以把它存为一个include文件,使用时包含进来就行了。例子连接的数据库是sql
 server 7.0,我没用odbc,因为用oledb效率高的多。

<script language = VBScript runat = server>
  '-------------------------------------------------------------------
--------------
  '
  ' file name :       connectdb.inc
  '
  ' Description:      数据库连接
  '
  ' function list :   OpenDbConnection(a_strDataName , a_strServerName
)  :打开数据库连接
  '                   parameter:  a_strDateName , 数据库服务器名  
  '                               a_strServerName :数据库server名
  '
  '                   CloseDbConnection(a_objDbConn)   :关闭数据库连接

  '                   parameter: a_ObjDbConn ,连接对象
  '
  '
  ' date:             2000/05/03
  '
  ' Author:           LiuYunpeng
  '
  ' History:         2000/05/03   version 1.0
  '                  2000/06/03   modified function opendbconnection's
 parameters
  '                               by LiuYunpeng
  '-------------------------------------------------------------------
-------------

    
    Function OpenDbConnection(a_strDataName , a_strServerName)
       dim m_DbConn , m_strConn
       Set m_dbConn = Server.CreateObject("ADODB.Connection")
       m_strConn = "Provider=Sqloledb ; User ID = sa ; Password= ; Ini
tial Catalog = "&a_strDataName&" ; Data Source = "&a_strServerName  
       m_dbConn.open m_strConn
       Call CheckError()
       
       'return this database connection
       Set OpenDbConnection = m_dbConn   
    end function
    
    sub CloseDbConnection(a_objDbconn)
        a_objDbconn.close
        set a_objDbConn = nothing
    end sub    
          
        
</script>    



简单说一下使用方法,假设你的数据库server是"server1" , 数据库是"mydatab
ase" , 则使用如下

<%
dim m_objConn

'打开数据库连接
set m_objConn = OpenDbConnection("mydatabase" , "server1")
....

'关闭数据库连接
CloseDbConnection m_objConn
%>
    

--
ICQ:43395237 OICQ:126132  
我自豪我用正版,我骄傲我用盗版!!! 

※ 来源:.月光程序代码网 http://www.moon-soft.com.[FROM: 202.108.0.79]

[关闭][返回]






转载请注明:转载自 月光程序代码网 [ http://www.moon-soft.com ]