欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

通过实例学习ASP的对象复制

程序员文章站 2022-05-23 11:41:35
<%dim oconn,orsset oconn = server.createobject("...

<%
dim oconn,ors
set oconn = server.createobject("adodb.connection")
set ors = server.createobject("adodb.recordset")
oconn.open "provider=microsoft.jet.oledb.4.0;data source=" + server.mappath("db1.mdb")
session("conn") = oconn
ors.open "select * from t1",session("conn"),1,1
    response.write(ors(0))
ors.close
set ors = nothing
oconn.close
set oconn = nothing
%>

这是网上流传的把connection对象保存在seesion对象中的代码,注意其中的:session("conn") = oconn,对象的复制就是这样子的吗?下边我们来验证一下:

<%
dim oconn,ors
set oconn = server.createobject("adodb.connection")
set ors = server.createobject("adodb.recordset")
oconn.open "provider=microsoft.jet.oledb.4.0;data source=" + server.mappath("db1.mdb")
session("conn") = oconn
ors.open "select * from t1",session("conn"),1,1
    response.write(session("conn").connectionstring)
ors.close
set ors = nothing
oconn.close
set oconn = nothing
%>

结果出错,提示"缺少对象: session(...)"!这说明对象并没有复制成功,那session("conn")是什么类型的呢?我们用typename(session("conn"))来测试下,结果为"string"!出于好奇,我们直接输出session("conn")看看:

<%
dim oconn,ors
set oconn = server.createobject("adodb.connection")
set ors = server.createobject("adodb.recordset")
oconn.open "provider=microsoft.jet.oledb.4.0;data source=" + server.mappath("db1.mdb")
session("conn") = oconn
ors.open "select * from t1",session("conn"),1,1
    response.write(session("conn"))
ors.close
set ors = nothing
oconn.close
set oconn = nothing
%>

结果为:

provider=microsoft.jet.oledb.4.0;password="";user id=admin;data source=e:wwwdb1.mdb;mode=share deny none;extended properties="";jet oledb:system database="";jet oledb:registry path="";jet oledb:database password="";jet oledb:engine type=5;jet oledb:database locking mode=1;jet oledb:global partial bulk ops=2;jet oledb:global bulk transactions=1;jet oledb:new database password="";jet oledb:create system database=false;jet oledb:encrypt database=false;jet oledb:dont copy locale on compact=false;jet oledb:compact without replica repair=false;jet oledb:sfp=false

这不是connection对象的connectionstring属性值吗?connection对象默认的属性为connectionstring,执行session("conn") = oconn时只是将connection对象默认属性的值赋给session("conn")。那为什么用在ors.open "select * from t1",session("conn"),1,1也能成功呢?查找资料得出recordset对象open方法的第二个参数可以为connection对象,也可以是连接信息的字符串!ok了,那在上边例子中的oconn对象完全是多余的,直接用下边代码即可:

<%
dim ors
set ors = server.createobject("adodb.recordset")
session("conn") = "provider=microsoft.jet.oledb.4.0;data source=" + server.mappath("db1.mdb")
ors.open "select * from t1",session("conn"),1,1
    response.write(ors(0))
ors.close
set ors = nothing
%>

结果无错。好了,到现在为止还剩下一个问题没有解决:怎么才是正确的对象复制方法?还是用set语句:

<%
dim oconn,ors
set oconn = server.createobject("adodb.connection")
set ors = server.createobject("adodb.recordset")
oconn.open "provider=microsoft.jet.oledb.4.0;data source=" + server.mappath("db1.mdb")
set session("conn") = oconn
ors.open "select * from t1",session("conn"),1,1
    response.write(session("conn").connectionstring)
    response.write("<br/>")
    response.write(typename(session("conn")))
ors.close
set ors = nothing
oconn.close
set oconn = nothing
%>

这次能显示出connectionstring属性的信息了,结果也显示session("conn")为connection对象!