日期:2010-06-27  浏览次数:21047 次

  很多文章都介绍过,在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)