四、command对象:
从英语字面的意思就可以看出,command是用来做命令执行和参数传递的。而command对象的批量参数传递,storedprocude执行等等灵活而强大的功能也是它受到青睐的原因。command对象主要是向sql语句、storedprocude传递参数,依靠sql server的强大功能来完成数据库的操作;而recordset对象可以说是微软从新封装了数据对象,并提供了一系列的方法和属性来简化数据库的编程。我们看下面的一个例子,它用了两种不同的方法实现了向数据库中增加一新的记录条。从中可以清楚的看到command对象与recordset对象的不同点。
方法1(command)
const adcmdtext=&h0001
const adinteger=3
const advarchar=200
const adparaminput = &h0001
set conn=server.createobject("adodb.connection")
set comm=server.createobject("adodb.command")
conn.open "driver={ microsoft access driver};dbq="& _
server.mappath("/source_asp")&"/property/employee.mdb;"
comm.activeconnection=conn
comm.commandtype=adcmdtext
comm.commandtext="insert into employee (job_id,fri_name,last_name)"& _
&"values(?,?,?)"
set param=comm.createparameter("id",adinteger,adparaminput,3,4)
comm.parameters.append param
set param=comm.createparameter("fn",advarchar,adparaminput,255,"bill")
comm.parameters.append param
set param=comm.createparameter("ln",advarchar,adparaminput,255,"gates")
comm.parameters.append param
comm.execute
conn.close
方法2(recordset)
const adcmdtable=&h0002
set conn=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
conn.open "driver={microsoft access driver (*.mdb)};dbq="& _
server.mappath("/source_asp")&"/property/employee.mdb;"
rs.activeconnection=conn
rs.open "employee",,,adcmdtable
rs.addnew
rs("job_id")=4
rs("fri_name")="bill"
rs("last_name")="gates"
rs.update
rs.close
conn.close
从上面的例子就可以看出来了,这两个对象在处理一些问题上所用的不同的方法.recordset对象似乎更加好理解一些,因为它加入了一些在ansi sql中没有的元素,它其实是用 sql在数据库上产生一个记录集,然后用一个游标来指向这个记录集,超作该游标来遍历这个记录集。但在性能上来讲的话command的性能也相对要优越些.其可重应用性也非常的好。而且如果你是批量的加入记录的话,你也能体会到第一种方案的好处了,因为command对象就是将sql产生的记录集作为整体来处理。下面详细介绍command对象的属性、方法和集合。
1、 createparameter方法:用来产生一个parameter对象,常用的写法为set param=comm.createparameter(name,type,direction,size,value),其中name为参数的引用名,在后面引用参数的值时会有用;type为指定参数的类型,例如整数为adinteger;direction指定参数是输入还是输出,相应的值为adparaminput和adparamoutput;size指定参数的最大长度或最大的值;value指定参数的值。可以将各个选项分开来写,下面的两种写法是等价的:
set param= comm.createparameter(name,type,direction,size,value)
和
set param= comm.createparameter(name,type,direction,size)
param.value=value
下面的方法其灵活性更大。大家请注意,在使用了createparameter方法后只是建立了新的 parameter对象,还需使用parameter对象的append方法将该参数传递给command对象。
2、 execute方法:在指定了commandtext后,并将参数传递出去后,用execute方法来完成执行。
3、 activeconnection属性:用来指定与connection对象的连接,这里的一个技巧就是不同的command对象指向同一个connection连接。
4、 commandtext属性:其值可以是一条sql命令句,可以是一个表名,也可以是一个storedprocedure名。
5、 commandtype属性:它的值由commandtext相应值的给出,分别为adcmdtext,adcmdtable,adcmdstoredproc。与前面在讲connection对象的execute方法中的相应的选项的含义相同。
6、 commandtimeout属性:设定命令执行的超时的值。
7、 properties集合:我们不多讲了,与connection对象的property集合相差不多。
8、 parameters集合:也就是参数对象的集合了,他有主要item方法、append方法,和count属性,用法与property对象及error对象的相应属性和方法类似,下面给出一个示例:
const adcmdtext=&h0001
const adinteger=3
const advarchar=200
const adparaminput = &h0001
set conn=server.createobject("adodb.connection")
set comm=server.createobject("adodb.command")
conn.open "driver={microsoft access driver (*.mdb)};dbq="& _
server.mappath("/source_asp")&"/property/employee.mdb;"
comm.activeconnection=conn
comm.commandtype=adcmdtext
comm.commandtext="insert into employee (job_id,fri_name,last_name)"& _
"values(?,?,?);"
set param=comm.createparameter("id",adinteger,adparaminput,3)
param.value=14
comm.parameters.append param
set param=comm.createparameter("fn",advarchar,adparaminput,255,"bill")
comm.parameters.append param
set param=comm.createparameter("ln",advarchar,adparaminput,255,"gates")
comm.parameters.append param
comm.execute
conn.close
"the folowing statments show the value of parametrs
dim i
for i=0 to comm.parameters.count-1
response.write comm.parameters.item(i)&"<br>"
next
当然,我们在引用参数时也可以不用数字,而用前面在createparameter时定义的名字,例如:fn、id等等。另外我们可以将上面的程序的显示部分改为
dim key
for each key in comm.parameters
response.write key&"<br>"
next
下面我想重点讲一讲storedprocedure,它的强大足以让我们对它关注,当然这其中会涉及到一些sqlserver的知识
