很多文章都介绍过,在ASP中调用MSSQL存储过程(Stored Procedure)的介绍。可以使用两种方法:利用recordset对象,或者直接用command对象。
recordset对象相当简单,熟悉Asp的都能上手操作,这里简单做个实例:
Mssql 中建立存储过程SP_UserList :
CREATE PROCEDURE SP_UserList
@Uid int
AS
select * from Users where Uid = @Uid
return
GO
在SQL Server中执行存储过程:
declare @Uid int
execute SP_UserList 1
使用recordset对象调用:
Uid = 1
set rs=server.createobject("adodb.recordset")
sql = "exec SP_UserList "&Uid&""
rs.open sql,conn,1,1
或者:
Uid = 1 '存储过程的输入参数,为简化程序, 直接设置该值
sql = "SP_UserList "&Uid&""
Set rs = Conn.Execute(sql) '或者Set rs = Conn.Execute("exec SP_UserList "&Uid&"")
如果改用command对象来调用存储过程,则必须先加载adovbs.inc文件(文件adovbs.inc可在C:\Program Files\Common Files\System\ADO下找到):
<!--必须加载adovbs.inc文件,否则将出错-->
<!--#include file="adovbs.inc"-->
'-----建立Connection对象----------
set Conn = Server.CreateObject("Adodb.connection")
Conn.Open "driver={sql server};server=localhost;uid=sa;pwd=;database=Mydbase;"
Uid = 1
'-----建立Command对象-----------
set Comm = server.createobject("adodb.command")
Comm.ActiveConnection = Conn
Comm.CommandText = "SP_UserList" '存储过程名称,指定要执行的是一个存储过程
Comm.CommandType = 4 'adCmdStoredProc = 4 ,其为Stored Procedure
'-----准备 Stored Procedure 的参数-------
Comm.Parameters.Append Comm.CreateParameter("@Uid",adInteger,adParamInput,4,Uid) '命令格式Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)
'-----或者使用下列的方法定义 Stored Procedure 的参数:先创建输入参数对象,然后把参数加到参数集合-------
'Set CommFirstParam = Comm.CreateParameter("@Uid",adInteger,adParamInput,4,Uid) '创建输入参数对象
'Comm.Parameters.Append CommFirstParam '把参数加到参数集合
'-----执行存储过程----------------------
Comm.Execute
'-----下面输出参数结果----------------------
response.write Comm.Parameters("@Uid")
最后关闭command对象:Set Comm = Nothing。如果准备 Stored Procedure 的参数中采用的是创建输入参数对象的方法,则在最后还必须关闭对象:Set CommFirstParam = Nothing
再次提示一下,在使用command调对存储过程时,必须预先使用include加载adovbs.inc文件,否则肯定出错!!
下列是对Command对象中使用的各属性的描述。
1、ActiveConnection 属性:指示指定的 Command 或 Recordset 对象当前所属的 Connection 对象。
2、CommandText 属性:包含要根据提供者发送的命令的文本。设置或返回包含提供者命令(如 SOL 语句、表格名称或存储的过程调用)的字符串值。默认值为 ""(零长度字符串)。
3、CommandType 属性:指示 Command 对象的类型。
设置和返回值:
AdCmdText:将 CommandText 作为命令或存储过程调用的文本化定义进行计算。
AdCmdTable:将 CommandText 作为其列全部由内部生成的 SQL 查询返回的表格的名称进行计算。
AdCmdTableDirect:将 CommandText 作为其列全部返回的表格的名称进行计算。
AdCmdStoredProc:将 CommandText 作为存储过程名进行计算。
AdCmdUnknown:默认值。CommandText 属性中的命令类型未知。
adCmdFile:将 CommandText 作为持久 Recordset 文件名进行计算。
AdExecuteNoRecords:指示 CommandText 为不返回行的命令或存储过程(例如,插入数据的命令)。如果检索任意行,则将丢弃这些行且并不返回。它总是与 adCmdText 或 adCmdStoredProc 进行组合。
4、CreateParameter 属性:使用指定属性创建新的 Parameter 对象。返回 Parameter 对象。
语法:Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)
参数描述:
Name:可选,字符串,代表 Parameter 对象名称。
Type: 可选,长整型值,指定 Parameter 对象数据类型。关于有效设置请参见 Type 属性。
Direction:可选,长整型值,指定 Parameter 对象类型。关于有效设置请参见 Direction 属性。
Size:可选,长整型值,指定参数值最大长度(以字符或字节数为单位)。
Value: 可选,变体型,指定 Parameter 对象的值。
在上例使用Command对象时,在“准备 Stored Procedure 的参数”中,我们还可以这样实现:
Comm.Parameters.Append Comm.CreateParameter("Uid",adInteger,adParamInput,4)
Comm("Uid")=1
这样我们在使用存储过程(Stored Procedure) 参数的时候,就可以使用三种方法来实现了。
在ASP中使用存储过程使用到的各个属性我们就简单介绍到这里。在存储过程使用过程中,除了可传递输入参数外,还可以使用返回码和输出参数返回值,由于篇幅关系,笔者不再举例,有兴趣可去参考VB6.0的MSDN文档中有关ADO的部分和SQL Server 2000的帮助文档。
附:存储过程的书写格式
CREATE PROCEDURE [拥有者.]存储过程名[;程序编号]
[(参数#1,…参数#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS
程序行
Type 属性
adDBTimeStamp 135 日期时间数据类型
adDecimal 14 十进制整数值
adDouble 5 双精度小数值
adError 10 系统错误信息
adGUID 72 全域性唯一识别字(Globally unique identifier)
adDispath 9 COM/OLE自动对象(Automation Object)
adInteger 3 4字节有符号整数
adIUnknown 13 COM/OLE对象
adLongVarBinary 205 大型2字节值
adLongVarChar 201 大型字符串值
adLongVarWChar 203 大型未编码字符串
adNumeric 131 十进制整数值
adSingle 4 单精度浮点小数
adSmallInt 2 2字节有符号整数
adTinyInt 16 1字节有符号整数
adUnsignedBigInt 21 8字节无符号整数
adUnsignedInt 19 4字节无符号整数
adUnsignedSmallInt 18 2字节无符号整数
adUnsignedTinyInt 17 1字节无符号整数
adUserDefined 132 用户自定义数据类型
adVariant 12 OLE对象
adVarBinary 204 双字节字符变量值
adVarChar 200 字符变量值
advarchar 202 未编码字符串变量值
adWchar 130 未编码字符串
Direction 属性
名称值 整数值 功能
adParamInput 1 允许数据输入至该参数当中
adParamOutput 2 允许数据输出至该参数当中
adParamInputOutput 3 允许数据输入、输出至该参数当中
adparamReturnValue 4 允许从一子程序中返回数据至该参数当中