田贤追博客 - QQ:260776893,Tel:13065860667

网站建设电子商务博客(网站制作,优化推广,网络营销宣传,B2B,网络广告),网络维护,平面设计及相关的文章信息发布共享。

« 正则表达式技术ASP网页数据库的操作 »

ASP网页数据库的连接

网页数据库的连接方法有两种,一种是DSN数据源,另一种是DSN-less方式,即不建立DSN连接数据。我们考虑最简单的BBS系统应用环境,使用互联网上免费资源,通常互联网上免费主页空间只支持简单的ASP应用以及Access数据库应用,Access数据库通常要求放置在固定的虚拟目录位置,譬如:[\db]目录位置,数据库的连接也只支持DSN-less方式,这也是自然的,既然是免费资源,总不能要求人家还特别帮你设置一个DSN数据源。另外,BBS通常只作为Web应用的一部分,或者说作为你个人主页或商业网站提供的一个附加功能,这个时候,你的BBS论坛系统通常都安装在主页空间一个单独的目录下,我们假定为[\BSS]。
所有要进行数据库存取的ASP网页都要以DSN-less方式进行数据库连接,由此我们可以将执行数据库连接的ASP代码单独形成一个插入文件,通常插入文件都是以[.inc]作为扩展名,考虑到安全性的需要,防止用户直接输入文件名下载此插入文件,所以我们仍然以[.asp]作为插入文件的扩展名,比如,我们将一个用作数据读操作的数据库连接插入文件名命名为[dbconr.asp],下面就是其典型代码:
<%
'adModeUnknown 0 default
'adModeRead 1
'adModeWrite 2
'adModeReadWrite 3
'adModeShareDenyRead 4
'adModeShareDenyWrite 8
'adModeShareExclusive 12
'adModeShareDenyNone 16

strDBPath = Server.MapPath("dbconr.asp")
strDBPath = replace(strDBPath,"\bbs\dbconr.asp","\db\bbsdata.mdb")
strDBConn= "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & strDBPath
Set objDBConn=server.createobject("adodb.connection")
objDBConn.ConnectionTimeOut=20
objDBConn.Mode=1 ‘读模式
objDBConn.open strDBConn
%>
注意,其中的objDBConn.Mode既为我们所做的数据库连接将用于操作的模式是读、写、或是读写。至于为什么需要设置Mode属性?设置Mode属性可以节省ADO组件的处理时间。另外,数据用户的权限管理十分重要,设置Mode属性能够有效率地规划整个Web应用程序的用户权限。所以,从安全性和代码执行效率方面考虑,我们将读与写数据库连接插入文件分别开来,分别命名为[dbconr.asp]和[dbconrw.asp]。
数据库连接操作是一个相当频繁的操作,我们可以采用适当的技术来进行数据库连接优化,以提高数据库连接性能。在ASP的数据库编程中,connection对象是我们不可能离开的一个对象,在对数据库进行任何的操作,比如更新记录,插入,删除,检索等,都必须借助于connection对象来完成。形象地来说,connection对象就是程序与数据库沟通的管道,所有对数据库的操作,都必须经过它,因此,无论我们以何种方式连接数据库前,总是少不了执行下列的代码。
Set objDBConn=Server.CreateObject("ADODB.Connection")
建立一个connection对象的实例变量,然后才能在它的基础上建立recordset对象或是command对象来操作数据库。既然connection对象是如此的重要,那么如何优化和管理好connection对象对数据库程序来说是极其重要的,它关系到程序的性能。
每当一个客户执行数据库操作时,就需要借助一个connection对象,而每个connection对象就会占用服务器的一部分资源,而数据库的同时连接数不可能是无限的,因此。在考滤要提供高性能的数据库Web程序时,我们需要考虑如何去减少服务器的开销。一般来说。每个ASP页面中建立一个connection对象,都会在服务器中产生一个对数据库的连接。而不同的页面的connection对象是不能共享的。那么。我们可不可以使同一个用户所访问的不同页面共享一个connection连接通道呢。
我们来回顾一下ASP六大内置对象的session对象,它可以为某个特定的用户来保存私有的数据,如果我们把connection对象保存在session对象中,是否可以使不同的ASP页面都使用同一个连接通道呢?看看下面的这段程序。
<%
Set objDBConn=Server.CreateObject("ADODB.Connection")
objDBConn.Mode=?
objDBConn.Open"[DSN-less串]"
session("dbconn")=objDBConn
Set rs=Server.CreateObject("ADODB.Recordset")
Commandtext = "select * from userlist"
connstr=session("dbconn")
rs.open Commandtext , connstr , 3 , 2
%>
在这个数据库连接中。我们使用了session对象,首先,建立一个objDBConn的连接对象,然后连接到数据表userlist中,取得连接句柄后,把它保存在session("dbconn")这个session变量中,在打开记录集前,从session("dbconn")中取出句柄,借助于session对象。我们可以使不同的ASP页面共用一个连接对象,减少了对服务器内存的开销,而我们也不需要担心,当一个客户因为错误操作导致服务器不能释放该被占用的session连接对象,因为我们知道每个客户的session对象是有一定的生存期限的,过了这个期限,服务器就会自动把它释放掉。
然而,数据库连接性能的提高是以一定的服务器资源消耗为代价的,所以,我们就要在其中权衡利弊。通常,利用别人的主机空间来作为自已BBS系统的平台,就应该尽谅避免使用过多的服务器资源,诸如APPLICATION以及SESSION变量,反之,主机资源丰富,而应用系统相对较少,则可以考虑采用上述优化方式。
 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 91204

© 2007-2009 Powered By 田贤追博客 All rights reserved. 浙ICP备09005319号·