sa文件,即可直接访问所有的ADO常量:
或者:
因此,我们的第一条规则为:
避免包含ADOVBS.inc文件,通过其他方法访问和使用ADO常量。五、使用记录集时是否应该创建单独的连接对象?
要正确地回答这个问题,我们必须分析两种不同条件下的测试:第一,页面只有一个数据库事务;第二,页面有多个数据库事务。
在前例中,我们创建了一个单独的Connection对象并将它赋给Recordset的ActiveConnection属性。然而,如ADO__03.asp所示,我们也可以直接把连接串赋给
ActiveConnection属性,在脚本中初始化和配置Connection对象这一额外的步骤可以省去。
objRS.ActiveConnection=Application("Conn")
虽然Recordset对象仍旧要创建一个连接,但此时的创建是在高度优化的条件下进行的。因此,与上一次测试相比,页面开销又下降了23%,而且如预期的一样,单个记录的显示时间没有实质的变化。
浪曦网-国内顶级IT视频网络编程教育平台Www.LangSin.Com
浪曦网-国内顶级IT视频网络编程教育平台Www.LangSin.Com
因此,我们的第二个规则如下:
如果只使用一个记录集,直接把连接串赋给ActiveConnection属性。
接下来我们检查页面用到多个记录集时,上述规则是否仍旧有效。为测试这种情形,我们引入一个FOR循环将前例重复10次。在这个测试中,我们将研究三种变化:
第一,如ADO__04.asp所示,在每一个循环中建立和拆除Connection对象:
Dimi
Fori=1to10
SetobjConn=Server.CreateObject("ADODB.Connection")objConn.OpenApplication("Conn")
SetobjRS=Server.CreateObject("ADODB.Recordset")objRS.ActiveConnection=objConn
objRS.CursorType=0'adOpenForwardOnlyobjRS.LockType=1'adLockReadOnlyobjRS.OpenApplication("SQL")IfobjRS.EOFThen
Response.Write("NoRecordsFound")Else
'writeheadings...
'writedata...EndIf
objRS.Close
SetobjRS=NothingobjConn.Close
SetobjConn=NothingNext
第二,如ADO__05.asp所示,在循环外面创建Connection对象,所有记录集共享该对象:
SetobjConn=Server.CreateObject("ADODB.Connection")objConn.OpenApplication("Conn")
Dimi
Fori=1to10
SetobjRS=Server.CreateObject("ADODB.Recordset")objRS.ActiveConnection=objConn
objRS.CursorType=0'adOpenForwardOnlyobjRS.LockType=1'adLockReadOnly
浪曦网-国内顶级IT视频网络编程教育平台Www.LangSin.Com
浪曦网-国内顶级IT视频网络编程教育平台Www.LangSin.Com
objRS.OpenApplication("SQL")IfobjRS.EOFThen
Response.Write("NoRecordsFound")Else
'writeheadings...
'writedata...EndIf
objRS.Close
SetobjRS=NothingNext
objConn.Close
SetobjConn=Nothing
第三,如
ADO__06.asp所示,在每一个循环内把连接串赋给ActiveConnection属性:
Dimi
Fori=1to10
SetobjRS=Server.CreateObject("ADODB.Recordset")objRS.ActiveConnection=Application("Conn")objRS.CursorType=0'adOpenForwardOnlyobjRS.LockType=1'adLockReadOnlyobjRS.OpenApplication("SQL")IfobjRS.EOFThen
Response.Write("NoRecordsFound")El