说说对象的复制

作者:网络 来源:佚名 更新时间:2008-12-04 18:43:40 点击:

以下为引用的内容:
<%
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:\www\db1.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:don't 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对象!

原文:http://www.mzwu.com/article.asp?id=1105