Command对象

一个SQL命令的描述文本可能是相当复杂的,有的命令中还要用到若干个参数。因此,用Conn.Execute方法来执行命令有时表达起来十分困难。Command对象就是克服这一困难的最好工具。使用Command对象可以预先把命令和参数储存在它的属性和参数集合中,最后执行语句Command.Execute即可。

一 Command对象的属性

建立Command对象的方法如下:
Set CommandName = Server.CreqateObject("ADODB.command")
其中,CommandName是您给Command对象的命名。建立了Command对象以后,需要给它设置属性值。Command对象有七条属性,前两条是必须设置的。

1 ActiveConnection属性
Command对象是基于一个已建立的Connection对象的。本属性用来表示连接信息,它一般是一个连接对象的名称。语法
CommandName.ActiveConnection = 连接信息(如onnection对象名)
如:Comm.ActiveConnection=Conn 。这一步是不可缺少的。

2 CommandText属性
这一属性用来储存要执行的命令本身,它可以是一条SQL命令,数据库表名或储存过程的名。语法
CommandName.CommandText = 命令字符串
如:Comm.CommandText = "Insert into friends values(5,?,?,?,?)" 。这是一个插入命令,"?"部分由参数对象提供。

3 CommandType属性
这一属性用来储存命令的操作类型,类似于RecordSet的OPEN方法的Option参数。可以省略。其取值-1,1,2,3的含义如下表。

参数常数
 数值
 说明
 
adCmdUnknown
 -1
 类型不确定,这是缺省值
 
AdCmdText
 1
 一般命令。文本SQL命令
 
AdCmdTable
 2
 一个存在的表名称
 
AdCmdStoreProc
 3
 一个存在的过程名(Stored Procedure)
 

该属性可以读/写,例如:Comm.CommandType = adCmdText

4 CommandTimeOut属性
该属性用来确定Command命令执行的最长等待时间(秒),缺省值为30秒。该值设置为0表示无时间限制。在程序中如果使用表单输入,输入时由等待(不操作),就会发生“超时”而报错。

5 Name属性
该属性储存了Command对象的名称,名称是在创建时给出的,所以该属性是只读的。

6 State属性
该属性用来设置Command对象的状态。状态有两种,adStateClosed=0 表示关闭,adStateOpen=1 表示打开(缺省值)。

7 Prepared属性
Prepared属性是Boolean型的,用来设置Command对象的SQL命令是否预编译。如 Comm.Prepared = Ture,则对数据库进行操作前预编译SQL命令,这样可以提供执行速度,这对于需要多次执行的命令很有用。缺省值为false。

Command对象有两个方法Execute 和CreateParameter。Execute方法用来执行命令,但执行前往往需要用 CreateParameter 方法来创建参数。我们先介绍Execute方法。

二 Execute方法

Execute方法的功能是以Parameters集合中的参数来执行Command对象中储存的命令。Execute方法既是过程也是函数,所以有两种使用方法:

Set recordset = Command.Execute([RecordAffeted][,Parameters][,Option])
Command.Execute [RecordAffeted,Parameters,Option]

三个参数RecordAffeted,Parameters 和 Option都是可选项,RecordAffeted = 整数,表示执行命令时返回或影响的记录条数,缺省时无限制。Parameters选用时表示要传递参数集合Parameters中的所有参数。参数集合Parameters在下文叙述。Option 的可取值诶 -1,1,2,3,与上文CommandType属性中的含义一样。

例句:

Comm.Execute
Comm.Execute 20,Parameters,1
Set rs = Comm.Execute()
Set rs = Comm.Execute(20,Parameters,1)

三 Paremeter对象

Paremeter对象即参数对象,每个对象储存一个参数。Paremeter对象含有五个属性,它们分别是name 参数名(如字段名),type 参数类型(数据类型),direction 操作方向(输入,输出..),size=数据长度(字节数)和value=参数的值。其中,direction参数的可取值如下表。

参数常数 数值 说明 
adParemUnknown -1 参数类型不确定,这是缺省值 
AdParemInput 1 输入参数 
AdParemOutput 2 输出参数 
AdParemReturnvalue 3 返回值参数 

四 Paremeters集合(对象)

Paremeters集合是Command对象拥有的所有Paremeter对象的集合,Command对象一经创建,Paremeters集合就存在(一开始是空集合)。它只有一个属性Count=长整数表示已经定义的参数的个数,每个参数要用Command 对象的CreateParemeters()方法来创建。

Count属性的语法 N=comm.Parameters.Count

Paremeters集合用几个方法。Append方法把一个用CreateParemeters()方法创建的参数加入到参数集合中。delete方法输出一个指定的参数。Refresh方法用来重新取得Paremeters集合中的所有参数。Item方法用来取得Paremeters集合中的某个参数。它们的语法如下:

Comm.Paremeters.Append param
Comm.Paremeters.Delete index
Comm.Paremeters.Refresh
Set param = Comm.Paremeters.Item(index)
Set param = Comm.Paremeters(index)
Comm.Paremeters.Append param

其中,param是一个参数名,index是参数集的索引号,如数组的下标,从0 到 Parameters.Count-1。

五 CreateParemeters方法

Command对象的CreateParemeters()方法用来创建一个参数对象,语法如下:

Set 参数名 = CreateParemeters(Name,Type,Direction,Size,value)

其中Name,type等参数就是待创建的的诸属性,其含义参看上文Paremeter对象。使用时只要注意它们的次序。例如:
Set param = comm.CreateParameter("Name",129,AdParemInput,6,"李哓红")
注意,括号中的"Name"表示Param.name="Name", Name实际上是一个字段名。

六 Command对象应用示例

程序目标 应用Command对象数据库添加一个记录,数据值用Paremeter对象提供。

数据源friends,要执行的命令为:Insert Into friends values(5,?,?,?,?)
要添加的记录是(5 李哓红 女 1978.5.30 22)

代码

<%@ Language="vbscript" %>
<!– append.asp –>
<%
Const adChar=129   ’参数类型
Const adCmdText=1   ’命令类型
Const adParamInput=1 ’操作方向

Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "dsn=friends"
Set Comm=Server.CreateObject("ADODB.Command")
Comm.ActiveConnection=Conn
Comm.CommandText = "Insert into friends values(5,?,?,?,?)"
Comm.CommandType = adCmdText

Set param = comm.CreateParameter("name",adChar,adParamInput,6,"李哓红")
Comm.Parameters.append param
Set param = comm.CreateParameter("sex",adChar,adParamInput,2,"女")
Comm.Parameters.append param
Set param = comm.CreateParameter("birthday",adChar,adParamInput,9,"1978.5.30")
Comm.Parameters.append param
Set param = comm.CreateParameter("age",adChar,adParamInput,2,"22")
Comm.Parameters.append param
Comm.Execute

‘记录添加后显示所有记录以观看Execute后的结果
Set rs=Conn.Execute("select* from friends",10,1)
Response.Write "<a href=’vbscript:history.back()’>返回</a><br>"
Response.Write "<table border=2>"
Response.Write "<tr>"
for i=0 to rs.fields.Count-1 ’输出表头
 Response.Write "<td>" &Ucase(rs(i).name) & "</td>"
Next
Do While not rs.Eof ’输出记录
 Response.Write "<tr>"
 for i=0 to rs.fields.Count-1 ’输出表行
  Response.Write "<td>" & rs(i).value & "</td>"
 Next
 Response.Write "</tr>"
 rs.MoveNext
Loop
rs.close
conn.close
%>


评论

该日志第一篇评论

发表评论

评论也有版权!