Asp实现的数据库连接池功能函数分享
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
但是这项技术一般在java,php,.net里面运用到,asp很少用到,因为一些企业网站根本就不需要这样的技术。
也不是不能使用,下面就是研究出来的asp版本,能够加快网页的访问速度,降低数据库的压力。
1.数据库连接文件DbPool.asp
<%
ConstPoolSize=10
ConstConnstr="Driver={SQLServer};Server=(local);UID=sa;word=555;Database=db"
FunctionGetRandString(lenth)
Dimrndstr,i
Randomize
rndstr=""
i=1
dowhilei<=lenth
rndstr=rndstr&Chr(cint(((120-98+1)*Rnd)+97))
i=i+1
loop
GetRandString=rndstr
EndFunction
FunctionCreateDbConn()
DimDbConn,ConnKey
SetDbConn=Server.CreateObject("ADODB.Connection")
DbConn.OpenConnstr
ConnKey=GetRandString(10)
DbPool.AddConnKey,DbConn
EndFunction
FunctionGetDbConn()
DimCurKey,Keys
IfDbPool.Count>0Then
Keys=DbPool.Keys'获取键名。
CurKey=Keys(0)
Response.Write"CurDbConnKeyIs:"&CurKey&"<br/>"
SetConn=Server.CreateObject("ADODB.Connection")
SetConn=DbPool(CurKey)
IfConn.State=adStateClosedThen'如果这个连接已经关闭,将其从池里注销,再新建一个可用的连接并添加到池里
DbPool.RemoveCurKey
CallCreateDbConn()'新建一个连接并添加到池里
SetGetDbConn=GetDbConn()
Else'否则的话,将其从池里注销,然后将复制的对象返回
DbPool.RemoveCurKey
SetGetDbConn=Conn
ExitFunction
EndIf
Else
Response.Write"连接池已用完,请重新初始化应用程序"
Response.End
Endif
EndFunction
FunctionFreeDbConn(DbConn)
DbPool.AddGetRandString(10),DbConn
EndFunction
2.全局文件global.asa
<objectID="DbPool"Progid="Scripting.Dictionary"Scope="Application"runat="server"></object> <!--#includefile="DbPool.asp"--> <% SubApplication_OnStart DimConnKey Fori=1ToPoolSize'建立指定数目的数据库连接 CreateDbConn() Next EndSub SubApplication_OnEnd DbPool.RemoveAll EndSub %>
3.测试文件test.asp
<!--#includefile="DbPool.asp"-->
<%
Response.Write"TestStart:<br>"
Response.Write"CurrentObjectscount:"&DbPool.Count&"<br/>"
Setdbconn=Server.CreateObject("ADODB.Connection")
Setdbconn=GetDbConn()
Response.Write"getoneconnectionfrompool<br/>"
Response.Write"CurrentObjectscount:"&DbPool.Count&"<br/>"
SetRs=Server.CreateObject("ADODB.Recordset")
Rs.open"select*frommkdb",dbconn,1,1
DoWhileNotrs.eof
Response.writeRs("v_oid")&"<br/>"
Rs.movenext
loop
FreeDbConn(dbconn)
Response.Write"freeoneconnectiontopool<br/>"
Response.Write"CurrentObjectscount:"&DbPool.Count&"<br/>"
%>