WEB开发技术 第五章
5.5 ADO组件之 Command对象
From,吴教育
Email,wujiaoyu@21cn.com
Q Q,188128997
课程引入与回顾
? 利用常见的 sql语句来操作数据库
? 利用 sql语句来实现精确和模糊查找
目标
? 利用 Command对象来执行各种 SQL指令
? 利用 Command对象调用 access的查询
? 利用 Command对象调用 sql server的存储过程
Command对象概述
? Command对象是介于 Connection对象和 Recordset对象之
间的一个对象,主要用来传递 SQL指令,对数据库提出操
作请求,把得到的结果返给 Recordset对象。
? Command对象依赖 Connection对象,因为 Command对
象必须经过一个已经建立的 Connection对象才能发出 SQL
指令。
? 实际开发时常常省略了 Command对象,但是其实也隐含
建立了该对象。
? 建立 command对象语法:
Set command对象名 =server.createobject(“adodb.command”)
建立 Command对象的方法 ( 1)
? 一般是建立 Connection对象,然后再建立
Command对象。如:
– <%
– Dim db,cmd
– Set db=Server.CreateObject(“ADODB.Connection”)
– db.Open,Dsn=addr”
– Set
cmd=Server.CreateObject(“ADODB.Command”)
– cmd.ActiveConnection=db
– %>
建立 Command对象的方法 ( 2)
? 不建立 Connection对象,直接建立 Command对
象。
– <%
– Dim cmd
– Set cmd= Server.CreateObject(“ADODB.Command”)
– cmd.ActiveConnection=”addr” ?addr 是数据源名称
– %>
? 这种建立方法其实也要隐含建立 Connection对象,但是,
因为没有明确建立 Connection对象,就不能使用
Connection对象的 Execute等方法了。
Command对象的属性
属 性 说明
ActiveConnection 指定 Connection连接对象或连接字符串
CommandText 指定数据库操作信息, 可以是 SQL语句
,表名, 查询名, 存储过程名
CommandType 指定数据库操作信息的类型 -详见下表
CommandTimeout Command对象的 Execute方法的最长
执行时间 (缺省为 30秒 )
Prepared 指定数据查询信息是否要先行编译, 存
储 (true/false)
CommandType类型值
类型值 对应数值 说明
adcmdunknown -1 CommandText参数类型未知 (缺省 )
Adcmdtext 1 CommandText参数为 SQL语句
Adcmdtable 2 CommandText参数是一个表名
adcmdstoreproc 4 CommandText参数为一个存储过程
或是查询名
Command对象的方法
方法 说明
Execute 执行数据库操作命令, 类似于
Connection对象的 Execute方法 。
CreateParamete
r
用来创建一个 Parameter子对象
利用 Command对象存取数据库
使用 command进行非参数查询
? 首先在数据库中建立查询 list1,如
–Select * From users Where name=“李玫”
? 在 ASP中建立 Command对象的时候,指定
查询命令类型为查询,并指定查询命令字
符串为查询名称。如:
– cmd.CommandType=4
– CommandText= "list"
非参数查询示例
<html>
<head>
<title>非参数查询 </title>
</head>
<body>
<%
Dim db,strConn
strConn="Dbq=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"
Set db=Server.CreateObject("ADODB.Connection")
db.Open strConn
Dim cmd
Set cmd= Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=db
Dim rs
cmd.CommandType=4 '指定查询信息是查询名
cmd.CommandText= "list1" '指定查询名称
Set rs=cmd.Execute
Do While Not rs.Eof
Response.Write rs("name") & "<br>"
rs.MoveNext
Loop
db.Close
Set db=nothing
%>
</body>
</html>
使用 command进行参数查询
? 在建立查询 list2时,可以使用参数,如下面
input_name就是一个参数:
– Select * From users Where
name=input_name
? 执行时和非参数查询类似,但是要注意需
要传入参数。
参数查询示例
<form name="form1" method="post" action="">
请输入要查找的姓名,<input type="text" name="name" >
<input type="submit" value="确定 ">
</form>
<%
If Request.Form("name")<>"" Then
Dim db,strConn
strConn="Dbq=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"
Set db=Server.CreateObject("ADODB.Connection")
db.Open strConn
Dim cmd
Set cmd= Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=db
Dim prm_name,prm_type,prm_direction,prm_size,prm_value
prm_name="input_name" '参数名称,在 list2中的变量
prm_type=200 '参数类型,200表示是变长字符串
prm_direction=1 '参数方向,1表示输出
prm_size=10 '参数大小,最大字节数为 10
prm_value=Request.Form("name") '要传入的参数值
Dim prm '声明一个参数对象
Set prm=cmd.CreateParameter(prm_name,prm_type,prm_direction,prm_size,prm_value)
cmd.Parameters.Append prm '将参数对象 prm加入到参数集合中
Dim rs
cmd.CommandType=4 '指定查询信息是查询名
cmd.CommandText= "list2" '指定查询名称
Set rs=cmd.Execute
Do While Not rs.Eof
Response.Write rs("name") &vbtab & rs("tel")&"<br>"
rs.MoveNext
Loop
db.Close
Set db=nothing
End If
%>
调用 SQL Server的存储过程
存储过程是大型数据库的一个重要概念。
存储过程( Stored Procedure)有时也称为存
储查询( Stored Query),是存储在数据库
中的一组预先定义的 SQL语句集合,在存储
过程中不仅可以包括标准的 SQL语句,还可
以包含输入和输出参数。
存储过程具有以下优点
? 存储过程在执行速度上要快得多 (减少 了分析与
编译的时间 )
? 使用存储过程可以减轻网络的通信流量;
? 存储过程可以带有输入输出参数,利用 它返回一
个数据集合或其它类型的结果,可以实现较复杂
功能
示例:使用 SQL SERVER的存储过程实现密码验证
1) 首先建立一个用户信息库,用来存储用来的登录信息
2) 建立一个实现密码验证的存储过程
3) 实现一个用户登录页面,用来让用户登录
4) 实现一个调用存储过程来实现验证的页面
参见书上 P233页的案例二十三
取得存储过程的参数信息
<!--#INCLUDE file="ADOVBS.inc"-->
<%
Set MyConn=Server.CreateObject("ADODB.Connection")
Set MyCommand=Server.CreateObject("ADODB.Command")
connstr="driver={SQL Server};database=db;server=127.0.0.1;uid=gfg;pwd=gfg"
MyConn.Open connstr
Set MyCommand.ActiveConnection=MyConn
MyCommand.CommandType=adCMdStoredProc
MyCommand.CommandText="user_login"
MyCommand.Parameters.Refresh
%>
<HTML>
<HEAD><TITLE>Parameter Information</TITLE></HEAD>
<BODY>
<TABLE BORDER=1>
<CAPTION>Parameter Information</CAPTION>
<TR>
<TH>Parameter Name</TH>
<TH>Datatype</TH>
<TH>Direction</TH>
<TH>Size</TH>
</TR>
<%For Each thing in Mycommand.Parameters %>
<TR>
<TD><%=thing.name%></TD>
<TD><%=thing.type%></TD>
<TD><%=thing.direction%></TD>
<TD><%=thing.size%></TD>
</TR>
<%
Next
MyConn.Close
%>
</TABLE>
</BODY>
</HTML>
Parameter对象和 Parameter集合
? 一个 Parameter对象就是一个参数,若干个
参数对象组成一个 Parameters集合。
? 对象和集合的关系同 Error对象和 Errors集合。
Parameters集合的属性和方法
? 属性
– Count 返回参数集合中的参数对象个数,
– 如,cmd.Parameters.Count
? 方法
– Append 添加一个参数对象
– Delete 删除一个参数对象
– Item 返回一个参数对象
– Refresh 刷新 Parameters集合中的参数对象。
建立 Parameter对象
? 语法如下:
– Set Parameter对象实例 =Command对
象,CreateParameter(name,type,direction,size,value)
? 说明
– Name 参数名称
– Type 参数类型,参见下表
– Direction 参数方向,参见下表
– Size 参数大小,一般可以省略
– Value 参数的值
? 具体示例参看前面讲的 9-6.asp。
Type 参数类型
参数 说 明
adDBTimeStamp
135
日期时间类型
adInteger
3
整数
adSingle
4
单精度小数
adDouble
5
双精度小数
adVarChar
200
变长字符串
参数方向
参数 说 明
AdParamInput
1
输入
AdParamOutput
3
输出
AdParamInputOutput
4
输入与输出
AdParamReturn
5
返回值
Parameter对象的属性和方法
? 属性
– Name,Type,Direction,Size,Value和
Attributes
– 和 CreateParameter方法的几个参数类似。
? 方法
– AppendChunk 该方法用于添加数据到
Parameter对象的末尾。
参考资料
? <<ASP动态网站编程 >> 石志国 清华大学出版社
? <<ASP精解案例教程 >> 石志国 清华大学出版社
? <<ASP网络编程技术与实例 >> 胡标 人民邮电出版社
? <<网络程序设计 -ASP>> 尚俊杰 清华大学出版社
总结
? 利用 Command对象来执行各种 SQL指令
? 利用 Command对象调用 access的查询
? 利用 Command对象调用 sql server的存储过程
习题与作业
1,利用 connection对象,通过指定驱动程序的方
式与上次课所建立的 sql server中的学生成绩 库建
立连接,学生如需查询自己的成绩,则必须输
入自己的用户名了密码,并利用 SQL SERVER的
存储过程来验证用户身份,只有用户本人才可
以查看自己的成绩。
5.5 ADO组件之 Command对象
From,吴教育
Email,wujiaoyu@21cn.com
Q Q,188128997
课程引入与回顾
? 利用常见的 sql语句来操作数据库
? 利用 sql语句来实现精确和模糊查找
目标
? 利用 Command对象来执行各种 SQL指令
? 利用 Command对象调用 access的查询
? 利用 Command对象调用 sql server的存储过程
Command对象概述
? Command对象是介于 Connection对象和 Recordset对象之
间的一个对象,主要用来传递 SQL指令,对数据库提出操
作请求,把得到的结果返给 Recordset对象。
? Command对象依赖 Connection对象,因为 Command对
象必须经过一个已经建立的 Connection对象才能发出 SQL
指令。
? 实际开发时常常省略了 Command对象,但是其实也隐含
建立了该对象。
? 建立 command对象语法:
Set command对象名 =server.createobject(“adodb.command”)
建立 Command对象的方法 ( 1)
? 一般是建立 Connection对象,然后再建立
Command对象。如:
– <%
– Dim db,cmd
– Set db=Server.CreateObject(“ADODB.Connection”)
– db.Open,Dsn=addr”
– Set
cmd=Server.CreateObject(“ADODB.Command”)
– cmd.ActiveConnection=db
– %>
建立 Command对象的方法 ( 2)
? 不建立 Connection对象,直接建立 Command对
象。
– <%
– Dim cmd
– Set cmd= Server.CreateObject(“ADODB.Command”)
– cmd.ActiveConnection=”addr” ?addr 是数据源名称
– %>
? 这种建立方法其实也要隐含建立 Connection对象,但是,
因为没有明确建立 Connection对象,就不能使用
Connection对象的 Execute等方法了。
Command对象的属性
属 性 说明
ActiveConnection 指定 Connection连接对象或连接字符串
CommandText 指定数据库操作信息, 可以是 SQL语句
,表名, 查询名, 存储过程名
CommandType 指定数据库操作信息的类型 -详见下表
CommandTimeout Command对象的 Execute方法的最长
执行时间 (缺省为 30秒 )
Prepared 指定数据查询信息是否要先行编译, 存
储 (true/false)
CommandType类型值
类型值 对应数值 说明
adcmdunknown -1 CommandText参数类型未知 (缺省 )
Adcmdtext 1 CommandText参数为 SQL语句
Adcmdtable 2 CommandText参数是一个表名
adcmdstoreproc 4 CommandText参数为一个存储过程
或是查询名
Command对象的方法
方法 说明
Execute 执行数据库操作命令, 类似于
Connection对象的 Execute方法 。
CreateParamete
r
用来创建一个 Parameter子对象
利用 Command对象存取数据库
使用 command进行非参数查询
? 首先在数据库中建立查询 list1,如
–Select * From users Where name=“李玫”
? 在 ASP中建立 Command对象的时候,指定
查询命令类型为查询,并指定查询命令字
符串为查询名称。如:
– cmd.CommandType=4
– CommandText= "list"
非参数查询示例
<html>
<head>
<title>非参数查询 </title>
</head>
<body>
<%
Dim db,strConn
strConn="Dbq=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"
Set db=Server.CreateObject("ADODB.Connection")
db.Open strConn
Dim cmd
Set cmd= Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=db
Dim rs
cmd.CommandType=4 '指定查询信息是查询名
cmd.CommandText= "list1" '指定查询名称
Set rs=cmd.Execute
Do While Not rs.Eof
Response.Write rs("name") & "<br>"
rs.MoveNext
Loop
db.Close
Set db=nothing
%>
</body>
</html>
使用 command进行参数查询
? 在建立查询 list2时,可以使用参数,如下面
input_name就是一个参数:
– Select * From users Where
name=input_name
? 执行时和非参数查询类似,但是要注意需
要传入参数。
参数查询示例
<form name="form1" method="post" action="">
请输入要查找的姓名,<input type="text" name="name" >
<input type="submit" value="确定 ">
</form>
<%
If Request.Form("name")<>"" Then
Dim db,strConn
strConn="Dbq=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"
Set db=Server.CreateObject("ADODB.Connection")
db.Open strConn
Dim cmd
Set cmd= Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=db
Dim prm_name,prm_type,prm_direction,prm_size,prm_value
prm_name="input_name" '参数名称,在 list2中的变量
prm_type=200 '参数类型,200表示是变长字符串
prm_direction=1 '参数方向,1表示输出
prm_size=10 '参数大小,最大字节数为 10
prm_value=Request.Form("name") '要传入的参数值
Dim prm '声明一个参数对象
Set prm=cmd.CreateParameter(prm_name,prm_type,prm_direction,prm_size,prm_value)
cmd.Parameters.Append prm '将参数对象 prm加入到参数集合中
Dim rs
cmd.CommandType=4 '指定查询信息是查询名
cmd.CommandText= "list2" '指定查询名称
Set rs=cmd.Execute
Do While Not rs.Eof
Response.Write rs("name") &vbtab & rs("tel")&"<br>"
rs.MoveNext
Loop
db.Close
Set db=nothing
End If
%>
调用 SQL Server的存储过程
存储过程是大型数据库的一个重要概念。
存储过程( Stored Procedure)有时也称为存
储查询( Stored Query),是存储在数据库
中的一组预先定义的 SQL语句集合,在存储
过程中不仅可以包括标准的 SQL语句,还可
以包含输入和输出参数。
存储过程具有以下优点
? 存储过程在执行速度上要快得多 (减少 了分析与
编译的时间 )
? 使用存储过程可以减轻网络的通信流量;
? 存储过程可以带有输入输出参数,利用 它返回一
个数据集合或其它类型的结果,可以实现较复杂
功能
示例:使用 SQL SERVER的存储过程实现密码验证
1) 首先建立一个用户信息库,用来存储用来的登录信息
2) 建立一个实现密码验证的存储过程
3) 实现一个用户登录页面,用来让用户登录
4) 实现一个调用存储过程来实现验证的页面
参见书上 P233页的案例二十三
取得存储过程的参数信息
<!--#INCLUDE file="ADOVBS.inc"-->
<%
Set MyConn=Server.CreateObject("ADODB.Connection")
Set MyCommand=Server.CreateObject("ADODB.Command")
connstr="driver={SQL Server};database=db;server=127.0.0.1;uid=gfg;pwd=gfg"
MyConn.Open connstr
Set MyCommand.ActiveConnection=MyConn
MyCommand.CommandType=adCMdStoredProc
MyCommand.CommandText="user_login"
MyCommand.Parameters.Refresh
%>
<HTML>
<HEAD><TITLE>Parameter Information</TITLE></HEAD>
<BODY>
<TABLE BORDER=1>
<CAPTION>Parameter Information</CAPTION>
<TR>
<TH>Parameter Name</TH>
<TH>Datatype</TH>
<TH>Direction</TH>
<TH>Size</TH>
</TR>
<%For Each thing in Mycommand.Parameters %>
<TR>
<TD><%=thing.name%></TD>
<TD><%=thing.type%></TD>
<TD><%=thing.direction%></TD>
<TD><%=thing.size%></TD>
</TR>
<%
Next
MyConn.Close
%>
</TABLE>
</BODY>
</HTML>
Parameter对象和 Parameter集合
? 一个 Parameter对象就是一个参数,若干个
参数对象组成一个 Parameters集合。
? 对象和集合的关系同 Error对象和 Errors集合。
Parameters集合的属性和方法
? 属性
– Count 返回参数集合中的参数对象个数,
– 如,cmd.Parameters.Count
? 方法
– Append 添加一个参数对象
– Delete 删除一个参数对象
– Item 返回一个参数对象
– Refresh 刷新 Parameters集合中的参数对象。
建立 Parameter对象
? 语法如下:
– Set Parameter对象实例 =Command对
象,CreateParameter(name,type,direction,size,value)
? 说明
– Name 参数名称
– Type 参数类型,参见下表
– Direction 参数方向,参见下表
– Size 参数大小,一般可以省略
– Value 参数的值
? 具体示例参看前面讲的 9-6.asp。
Type 参数类型
参数 说 明
adDBTimeStamp
135
日期时间类型
adInteger
3
整数
adSingle
4
单精度小数
adDouble
5
双精度小数
adVarChar
200
变长字符串
参数方向
参数 说 明
AdParamInput
1
输入
AdParamOutput
3
输出
AdParamInputOutput
4
输入与输出
AdParamReturn
5
返回值
Parameter对象的属性和方法
? 属性
– Name,Type,Direction,Size,Value和
Attributes
– 和 CreateParameter方法的几个参数类似。
? 方法
– AppendChunk 该方法用于添加数据到
Parameter对象的末尾。
参考资料
? <<ASP动态网站编程 >> 石志国 清华大学出版社
? <<ASP精解案例教程 >> 石志国 清华大学出版社
? <<ASP网络编程技术与实例 >> 胡标 人民邮电出版社
? <<网络程序设计 -ASP>> 尚俊杰 清华大学出版社
总结
? 利用 Command对象来执行各种 SQL指令
? 利用 Command对象调用 access的查询
? 利用 Command对象调用 sql server的存储过程
习题与作业
1,利用 connection对象,通过指定驱动程序的方
式与上次课所建立的 sql server中的学生成绩 库建
立连接,学生如需查询自己的成绩,则必须输
入自己的用户名了密码,并利用 SQL SERVER的
存储过程来验证用户身份,只有用户本人才可
以查看自己的成绩。