⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0077.htm

📁 ASP教程宝典 书籍语言: 简体中文 书籍类型: 网络编程 授权方式: 免费软件 书籍大小: 500 KB
💻 HTM
字号:
<html>

<head>
<title>新时代软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋体}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1  {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
    <p align="center"><big><strong>关于数据库连接的一点个人见解</strong></big></p>

<div align="right">---摘自《ChinaASP网络》(文/bigeagle)</div>
&nbsp;&nbsp;&nbsp;&nbsp;最近经常见到有人问如何连接数据库效率最高,耗费资源最低,在这里我谈一下我的看法。连接数据库不外乎三种方法,一种是将数据库连接放到session变量中,一种是放到application变量中,再一种就是在页面中使用时打开,用完立刻关闭。尽管前两种方法用起来比较方便,但应该说第三种方法是最好的,下面我分别讲一下,由于水平所限,错误难免,请大家指正。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;session:用session的缺点显而易见,服务器会为每一个用户创建一个数据连接,直到这个用户离开或session超时,这样就会大大浪费服务器资源,如果访问量大的话,系统资源就会被耗尽,或者数据库连结数到达上界,就会造成程序出错。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;application:既然用session会出现这么多问题,那是不是用application最节省资源呢?只建立一条连接就够了,大家共用。不是这样的,如果无论多少用户只建立一条连接,同样会带来很多问题,首先是如果访问量大,一条连接肯定无法满足需要,同样会造成程序出错;其次,如果你用了私人临时表或光标,那麻烦就来了。私人临时表和光标只对当前连接可见,可是如果大家都用一条连接,那么就会产生冲突,造成程序错误。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;最后一种方法(即开即用即关):这是最好的一种方法,原因如下:打开数据库连接,使用完立即关闭,是一种良好的编程习惯,其实不仅是数据库连接对象如此,所有对象也就是说server.creatobject出来的对象理论上生存期都不能超过0.01秒(国外有人做过测试的,不是我信口开河),如果超过就会对效率产生影响。那么也许你会说每个页面都会打开一个连接,那打开的连接数不是更多,效率不是更低吗?错了,讲到这里就不能不提一下连接池(也叫共享池的概念),现在的大型数据库包括odbc本身都提供连接池的功能,他的基本原理是这样的,一个连接申请关闭时系统并不是真的关闭它,而是将它放到共享池中,如果这时有相同的连接请求,系统就会把这个连接从共享池中取出来给用户,这样就省去了关闭和打开连接的系统开销,只有当这个连接长时间不被请求时并且共性池中的连接饱和,系统才会真的干掉它。明白这个道理,你就明白尽管你在程序中请求打开和关闭连接,但系统并不一定要增加这些开销的。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;道理讲完了,现在给例子。下面是打开和关闭数据库连接的两个函数,你可以把它存为一个include文件,使用时包含进来就行了。例子连接的数据库是sql server 7.0,我没用odbc,因为用oledb效率高的多。<br>
<br>
&lt;script language = VBScript runat = server&gt;<br>
&nbsp;&nbsp;'---------------------------------------------------------------------------------<br>
&nbsp;&nbsp;'<br>
&nbsp;&nbsp;' file name :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connectdb.inc<br>
&nbsp;&nbsp;'<br>
&nbsp;&nbsp;' Description:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据库连接<br>
&nbsp;&nbsp;'<br>
&nbsp;&nbsp;' function list :&nbsp;&nbsp;&nbsp;OpenDbConnection(a_strDataName , a_strServerName)&nbsp;&nbsp;:打开数据库连接<br>
&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameter:&nbsp;&nbsp;a_strDateName , 数据库服务器名&nbsp;&nbsp;<br>
&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_strServerName :数据库server名<br>
&nbsp;&nbsp;'<br>
&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseDbConnection(a_objDbConn)&nbsp;&nbsp;&nbsp;:关闭数据库连接<br>
&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameter: a_ObjDbConn ,连接对象<br>
&nbsp;&nbsp;'<br>
&nbsp;&nbsp;'<br>
&nbsp;&nbsp;' date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2000/05/03<br>
&nbsp;&nbsp;'<br>
&nbsp;&nbsp;' Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LiuYunpeng<br>
&nbsp;&nbsp;'<br>
&nbsp;&nbsp;' History:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2000/05/03&nbsp;&nbsp;&nbsp;version 1.0<br>
&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2000/06/03&nbsp;&nbsp;&nbsp;modified function opendbconnection's parameters<br>
&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by LiuYunpeng<br>
&nbsp;&nbsp;'--------------------------------------------------------------------------------<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;Function OpenDbConnection(a_strDataName , a_strServerName)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dim m_DbConn , m_strConn<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set m_dbConn = Server.CreateObject(&quot;ADODB.Connection&quot;)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_strConn = &quot;Provider=Sqloledb ; User ID = sa ; Password= ; Initial Catalog = &quot;&amp;a_strDataName&amp;&quot; ; Data Source = &quot;&amp;a_strServerName&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_dbConn.open m_strConn<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Call CheckError()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'return this database connection<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set OpenDbConnection = m_dbConn&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;end function<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;sub CloseDbConnection(a_objDbconn)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_objDbconn.close<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set a_objDbConn = nothing<br>
&nbsp;&nbsp;&nbsp;&nbsp;end sub&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&lt;/script&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br>
<br>
<br>
<br>
简单说一下使用方法,假设你的数据库server是&quot;server1&quot; , 数据库是&quot;mydatabase&quot; , 则使用如下<br>
<br>
&lt;%<br>
&nbsp;&nbsp;&nbsp;&nbsp;dim m_objConn<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;'打开数据库连接<br>
&nbsp;&nbsp;&nbsp;&nbsp;set m_objConn = OpenDbConnection(&quot;mydatabase&quot; , &quot;server1&quot;)<br>
&nbsp;&nbsp;&nbsp;&nbsp;....<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;'关闭数据库连接<br>
&nbsp;&nbsp;&nbsp;&nbsp;CloseDbConnection m_objConn<br>
%&gt;<br>

  </table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -