没有合适的资源?快使用搜索试试~ 我知道了~
ASP如何调用存储过程.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 54 浏览量
2022-07-05
03:04:20
上传
评论
收藏 29KB DOCX 举报
温馨提示
试读
12页
ASP如何调用存储过程
资源推荐
资源详情
资源评论
ASP 调用存储过程
� ASP 和存储过程(Stored Procedures)的文章不少,不过我怀疑作者们是否真正实践过。我在初
学时查阅过大量相关资料,发现其中提供的非常多方法实际操作起来并不是那么回事。对于简单
的应用,这些资料也许是有帮助的,但仅限于此,因为他们根本就是千篇一律,互相抄袭,稍微
复杂点的应用,就全都语焉不详了。
目前,我基本上通过调用存储过程访问 SQL Server,以下的文字虽不敢确保绝对正确,但都
是实践的总结,希望对大家能有帮助。
存储过程就是作为可执行对象存放在数据库中的一个或多个 SQL 命令。
定义总是非常抽象。存储过程其实就是能完成一定操作的一组 SQL 语句,只不过这组语句
是放在数据库中的(这里我们只谈 SQL Server)。如果我们通过创建存储过程及在 ASP 中调用存
储过程,就能避免将 SQL 语句同 ASP 代码混杂在一起。这样做的好处至少有三个:
第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程能大大减少同
数据库的交互次数。
第二、提高安全性。如果将 SQL 语句混合在 ASP 代码中,一旦代码失密,同时也就意味着
库结构失密。
第三、有利于 SQL 语句的重用。
在 ASP 中,一般通过 command 对象调用存储过程,根据不同情况,本文也介绍其他调用方
法。为了方便说明,根据存储过程的输入输出,作以下简单分类:
1. 只返回单一记录集的存储过程
假设有以下存储过程(本文的目的不在于讲述 T-SQL 语法,所以存储过程只给出代码,不作
说明):
/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go
以上存储过程取得 userinfo 表中的所有记录,返回一个记录集。通过 command 对象调用该
存储过程的 ASP 代码如下:
’**通过 Command 对象调用存储过程**
DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr ’MyConStr 是数据库连接字串
MyComm.CommandText = "getUserList" ’指定存储过程名
MyComm.CommandType = 4 ’表明这是个存储过程
MyComm.Prepared = true ’需求将 SQL 命令先行编译
Set MyRst = MyComm.Execute
Set MyComm = Nothing
存储过程取得的记录集赋给 MyRst,接下来,能对 MyRst 进行操作。
在以上代码中,CommandType 属性表明请求的类型,取值及说明如下:
-1 表明 CommandText 参数的类型无法确定
1 表明 CommandText 是一般的命令类型
2 表明 CommandText 参数是个存在的表名称
4 表明 CommandText 参数是个存储过程的名称
还能通过 Connection 对象或 Recordset 对象调用存储过程,方法分别如下:
’**通过 Connection 对象调用存储过程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.open MyConStr ’MyConStr 是数据库连接字串
Set MyRst = MyConn.Execute("getUserList",0,4) ’最后一个参断含义同 CommandType
Set MyConn = Nothing
’**通过 Recordset 对象调用存储过程**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1,4
’MyConStr 是数据库连接字串,最后一个参断含义和 CommandType 相同
2. 没有输入输出的存储过程
请看以下存储过程:
/*SP2*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
delete from dbo.[userinfo]
end
go
该存储过程删去 userinfo 表中的所有记录,没有所有输入及输出,调用方法和上面讲过的基
本相同,只是不用取得记录集:
’**通过 Command 对象调用存储过程**
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr ’MyConStr 是数据库连接字串
MyComm.CommandText = "delUserAll" ’指定存储过程名
MyComm.CommandType = 4 ’表明这是个存储过程
MyComm.Prepared = true ’需求将 SQL 命令先行编译
MyComm.Execute ’此处不必再取得记录集
Set MyComm = Nothing
当然也可通过 Connection 对象或 Recordset 对象调用此类存储过程,不过建立 Recordset 对
象是为了取得记录集,在没有返回记录集的情况下,还是利用 Command 对象吧。
3. 有返回值的存储过程
在进行类似 SP2 的操作时,应充分利用 SQL Server 强大的事务处理功能,以维护数据的一
致性。并且,我们可能需要存储过程返回执行情况,为此,将 SP2 修改如下:
/*SP3*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
BEGIN TRANSACTION
delete from dbo.[userinfo]
IF @@error=0
begin
COMMIT TRANSACTION
return 1
end
ELSE
begin
ROLLBACK TRANSACTION
return 0
end
return
end
go
以上存储过程,在 delete 顺利执行时,返回 1,否则返回 0,并进行回滚操作。为了在 ASP
中取得返回值,需要利用 Parameters 集合来声明参数:
’**调用带有返回值的存储过程并取得返回值**
DIM MyComm,MyPara
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr ’MyConStr 是数据库连接字串
MyComm.CommandText = "delUserAll" ’指定存储过程名
MyComm.CommandType = 4 ’表明这是个存储过程
MyComm.Prepared = true ’需求将 SQL 命令先行编译
’声明返回值
Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
MyComm.Execute
’取得返回值
DIM retValue
retValue = MyComm(0) ’或 retValue = MyComm.Parameters(0)
Set MyComm = Nothing
剩余11页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 82
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功