当前位置: 移动技术网 > IT编程>开发语言>.net > 通过实例学习ASP的对象复制

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

2019年01月18日  | 移动技术网IT编程  | 我要评论

羊髓,偷拍论坛,黄山热线

<%
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对象!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网