四、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的知识
|