ASP 3.0高级编程(三十八)

2008-02-23 05:38:57来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

8.3.3 使用连接状态
将连接字符串存入应用程序变量是一个常用的技巧,同使用一个包含文件一样有效。例如,可以在global.asa文件中加入下面的代码:
Sub Application_OnStart()

strConn = "Provider=SQLOLEDB; Data Source=WATCHER; " & _
"Initial Catalog=pubs; User Id=davids; Password=whisky"
Set Application("ConnectionString") = strConn

End Sub
在ASP页面中,可以使用下面的代码:
Set conPubs = Server.CreateObject("ADODB.Connection")

conPubs.Application("ConnectionString")
从个人的角度,我更喜欢使用包含文件的方法,因为我写了许多不同的连接到各种服务器和数据库的例子。使用应用程序方法将意味着每次必须关闭浏览器重新启动应用程序。读者可以使用自己喜欢的任一种方法,在速度上它们并没有差别。
对于在本书的这节内的例子,将使用一个含有连接字符串的connection.asp文件人作为一个包含文件。

8.3.4 连接语法
上面所叙述的是相关理论,当确实要与数据存储连接时,应该怎么办?如果使用显式定义的Connection对象,可以使用Open方法,它的语法如下:
connection.Open [ConnectionString], [UserID], [Password], [Options]
参数如表8-1所示:
表8-1 Open方法的参数及说明
参 数
说 明

ConnectionString
包含连接细节的字符串。可以是ODBC DSN的名称、数据链接文件的名称或真实的连接细节

UserID
连接期间,用户使用的名字。覆盖连接字符串中提供的任何用户名

Password
用户的口令。覆盖连接字符串中提供的任何口令

Options
可以是adAsyncConnect,指定异步地建立连接。忽略这个参数,则建立一个同步连接

异步连接不用于ASP环境,因为脚本语言不能接收来自ADO的事件。

8.3.5 连接的例子
下面是几个示例,这里假定strConn包含一个有效的连接字符串。
为了打开一个连接,使用Connection对象的Open方法。例如:
Set conPubs = Server.Connection("ADODB.Connection")

conPubs.Open strConn

' Some processing

conPubs.Close
也可以使用ConnectionString属性:
Set conPubs = Server.CreateObject("ADODB.Connection")

conPubs.ConnectionString = strConn
conPubs.Open

' Some processing

conPubs.Close
这两种实现方法之间没有什么区别,如果使用前一种方法来实现连接,ConnectionString属性同时也被赋值。
值得注意的是,一旦与数据存储建立了连接,ADO可能会改变ConnectionString属性值。不必担心,ADO只填写一些额外的属性值。

8.3.6 连接缓冲池
连接缓冲池(connection pool)总使许多人感到困惑,其实原理非常简单。当关闭一个连接,就用户(和ADO)而言,这个连接已经关闭。但实际上OLE DB并没有关闭这个连接,只是将其放入了非活动的连接缓冲池中。任何时候用户(或其他人)打开一个连接,OLE DB首先检测连接缓冲池中是否有相同连接细节的连接存在。如果有,将直接从缓冲池中取得此连接。如果没有,则为用户创建一个新的连接。为了避免浪费资源,经过一段缺省的时间段后,就从缓冲池中清除该连接。
那么,它的优点在哪里?打开一个连接可能是所进行的操作中最慢的操作之一,连接缓冲池使用户能与数据存储再次连接而无须重新创建连接。这对于那些连续打开和关闭大量连接的Web站点显得特别重要。
对于ODBC连接,连接缓冲池由ODBC Data Source Administrator控制。对于OLE DB,不能改变连接缓冲池(或叫会话缓冲池)。
必须注意的是,连接缓冲池不是连接共享。一个连接只有在被客户关闭后才能再次使用。
内务处理
为了使连接缓冲池生效,必须确保内务处理(Housekepping)处于有序状态。这包括及时关闭Connection对象,这样它们才能回到缓冲池重新使用。你可能认为不断地打开、关闭连接对系统的开销很大,但必须衡量一下可扩展性——你的应用程序可能有许多人在使用,OLE DB又非常善于管理连接资源。
一般的原则是:尽可能晚地建立连接,同时又要尽可能早地关闭连接,这样保证连接打开的时间段最短。

8.4 记录集
前面已经提到,记录集是ADO中最常用的对象,这并不值得奇怪。毕竟,他们包含着数据。但是,对于记录集还有比想象的更多的内容,知道数据如何保存和处理很重要,因为这为选择使用哪种记录集提供了更多的参考。
记录集有不同的类型,在一些细小的地方存在着差异,很容易造成失误。首先需要认真谈论的是光标的概念。

8.4.1 光标
光标(cursor)是让许多人感到困惑的概念,但实际上非常的简单。
光标用来管理记录集和记录集的当前位置,后者是由当前记录指针来处理的。
这不是Recordset对象所做的吗?是的,但是记录集也是依靠它的光标。这仍然没有回答光标是什么这个问题,那么先来看一个记录集,如表8-2所示:
AU_ID
AU_LNAME
AU_FNAME
PHONE

172-32-1176
White
Bob
408 496-7223

219-46-8915
Green
Marjorie
415 986-7020

238-95-7766
Carson
Cheryl
415 548-7723

267-41-2394
O'Leary
Michael
408 286-2428

274-80-9391
Straight
Dean
415 834-2919

341-22-1782
Smith
Meander
913 843-0462

这里有六行四列。打开一个记录集,当前记录就是第一个记录,即为Bob White的那条记录。用什么来标识当前记录?用当前记录指针。那么又如何处理这个指针呢?当需要移到下一条记录或者是其他记录时,是通过光标来实现的。在访问当前行的字段时,光标知道目前位于哪一行,所以能返回正确的值。如果试图移出记录集的最后一行,光标也会处理。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:ASP 3.0高级编程(三十七)

下一篇:ASP 3.0高级编程(三十九)