'创建 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.
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.Connection") cnn.Open strcnn Set rs = Server.CreateObject("ADODB.Recordset") rs.Open "SELECT * FROM Authors",cnn rs.Close Set rs = Nothing cnn.Close Set cnn = Nothing Next
采用上面的代码,连接数只需要2个!(只为说明问题,不考虑速度)
还有一点要说明的是:服务器处理 ASP 时不是一次只处理一个,也不是一次就把整个页面处理完,没有关闭的连接只会占用更多 的资源。所以,尽快的释放 Connection ,使它回到连接池中才是良好的编程习惯。连接池是服务器共享的资源,它不属于某个 ASP,也不属于某个 Session,或者某个 Application。
Dim cnn,rs1,rs2,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 .....