( 參見文章: 讓數據庫的連接更有效 )
3. 創建 Connection 對象,充分利用連接池。
看下列代碼:
'創建 Connection Object,打開 RecordSet
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strConnection
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open strSQL,cnn
'直接打開 RecordSet
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.open strSQL,strConnection
在 asptoday 的 Enhancing Performance in ASP - Part 2 中對這兩種方法進行了測試,結果表明直接打開 RecordSet 比創
建 Connection 快23%(快在頁面處理上,檢索數據庫的速度是一樣的。)所以,這篇文章的結論是:When working with a
single Recordset,pass the connection string into the ActiveConenction property.
我對此有異議:快的代碼不一定是好的代碼。
首先要說明的是,直接打開 RecordSet 的方法依然要創建與數據庫的連接,只不過是由 ADO 自動完成的。其次,這個
Connection 只有在該頁面處理完後才能被釋放(不管是 Recordset.Close 還是 Set recordset = Nothing 都不能做到釋放該
對象)。
Dim rs
Dim strcnn
strcnn = "Driver={SQL Server};Server=.;Database=pubs;UID=sa;PWD=;OLE DB Services=-1;"
For i = 1 To 20
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM Authors",strcnn
rs.Close
Set rs = Nothing
Next
運行上面的代碼,在性能監視器中你會發現數據庫的連接被創建了20個!
Dim cnn,rs
strcnn = "Driver={SQL Server};Server=.;Database=pubs;" &_
"UID=sa;PWD=;OLE DB Services=-1;"
For i = 1 To 20
Set cnn = Server.CreateObject("ADODB.Connectio
r3
strcnn = "Driver={SQL Server};Server=.;Database=pubs;UID=sa;PWD=;OLE DB Services=-1;"
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strcnn
Set rs1 = Server.CreateObject("ADODB.Recordset")
rs1.Open "SELECT * FROM Authors1",cnn
Set rs2 = Server.CreateObject("ADODB.Recordset")
rs2.Open "SELECT * FROM Authors2",cnn
Set rs3 = Server.CreateObject("ADODB.Recordset")
rs3.Open "SELECT * FROM Authors3",cnn
.....
道理很簡單,這種做法不需要為每一個 RecordSet 創建一個連接,只要傳遞一個引用就夠了。
5. 與多個數據庫連接的問題。
在大部份應用中,我們只對一個數據庫進行操作,但有時也會碰到與多個數據庫連接的情況。下面我們討論兩種連接方式:
'第一種:兩個 Connection,兩個 RecordSet。
Set cnn1 = Server.CreateObject("ADODB.Connection")
Set cnn2 = Server.CreateObject("ADODB.Connection")
cnn1.Open "provider=sqloledb;data source=210.75.56.37;initial catalog=pubs;user
id=coolbel;passWord=coolbel.com;"
cnn2.Open "provider=sqloledb;data source=210.75.56.37;initial catalog=coolbel;user
id=coolbel;passWord=coolbelcom;"
Set rs1 = Server.CreateObject("ADODB.RecordSet")
Set rs2 = Server.CreateObject("ADODB.RecordSet")
rs1.Open "select * from authors",cnn1
rs2.Open "select * from mytable",cnn2
......
'第二種:一個 Connection,兩個 RecordSet。
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open "provider=sqloledb;data source=210.75.56.37;user id=coolbel;passWord=coolbel.com;"
Set rs1 = Server.CreateObject("ADODB.RecordSet")
Set rs2 = Server.CreateObject("ADODB.RecordSet")
rs1.Open "select * from pubs..authors",cnn
rs2.Open "select * from coolbel..mytable",cnn
......
第二種方法極不可取,不僅速度低,而且浪費資源。其效率低下的根本原因在於這種連接方式沒有利用連接池,使得每一次請求都
要重新創建與數據庫的連接。
Click!測試第一種代碼 Click!測試第二種代碼 ( coolbel 不穩定,需要多測試幾遍。)
6. 對於 Disconnected RecordSet,不要忘記使 ActiveConnection = Nothing