ASP与sql存储过程详细教程
### ASP与SQL存储过程详细教程 #### 一、引言 在Web开发中,ASP(Active Server Pages)是一种广泛使用的服务器端脚本环境,而SQL Server则是常用的数据库管理系统之一。结合使用ASP与SQL Server可以构建功能强大的动态网站。在处理数据库操作时,使用存储过程可以显著提高性能和安全性。本文旨在详细介绍如何在ASP中调用SQL Server存储过程,并讨论其优势。 #### 二、存储过程的概念 存储过程是预编译并存储在数据库中的SQL命令集合,它可以接受输入参数,执行复杂的数据库操作,并返回结果或影响数据库的状态。在SQL Server中,存储过程由一系列SQL语句组成,并使用Transact-SQL语言编写。 存储过程的优点包括: 1. **提高执行效率**:存储过程被预编译并存储在数据库中,当多次执行相同的任务时,可以直接调用存储过程而无需重新编译,从而提高执行效率。 2. **增强安全性**:通过存储过程访问数据可以限制用户对底层数据表的直接访问权限,提供了一层安全保护。 3. **简化应用程序逻辑**:将复杂的业务逻辑封装到存储过程中,可以减少客户端应用程序的负担,使得应用程序更加简洁易维护。 #### 三、调用存储过程的方法 在ASP中,可以通过多种方式来调用SQL Server中的存储过程,下面分别介绍通过Command对象、Connection对象以及Recordset对象调用存储过程的方法。 ##### 3.1 通过Command对象调用存储过程 使用Command对象是最常见的调用存储过程的方式。示例代码如下: ```vb '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 ``` 在上述代码中,`CommandType`属性设置为4表示正在调用的是一个存储过程。 ##### 3.2 通过Connection对象调用存储过程 除了使用Command对象外,还可以直接通过Connection对象来调用存储过程。示例代码如下: ```vb 'DIM MyConn,MyRst 'Set MyConn = Server.CreateObject("ADODB.Connection") 'MyConn.Open MyConStr 'MyConStr是数据库连接字符串 'Set MyRst = MyConn.Execute("getUserList", 0, 4) 'Set MyConn = Nothing ``` 这里的`Execute`方法的第三个参数(4)同样表示调用的是一个存储过程。 ##### 3.3 通过Recordset对象调用存储过程 使用Recordset对象也是调用存储过程的一种方式。示例代码如下: ```vb 'DIM MyRst 'Set MyRst = Server.CreateObject("ADODB.Recordset") 'MyRst.Open "getUserList", MyConStr, 0, 1, 4 ``` 在这个例子中,最后一个参数4表示调用的是存储过程。 #### 四、不同类型存储过程的调用 根据存储过程的功能不同,可以将其分为几类,每类存储过程的调用方式略有不同。 ##### 4.1 只返回单一记录集的存储过程 这类存储过程主要用于查询操作,返回一个记录集供后续处理。例如,`getUserList`存储过程用于获取用户列表。 ```vb CREATE PROCEDURE dbo.getUserList AS SET NOCOUNT ON BEGIN SELECT * FROM dbo.userinfo END GO ``` 调用此类存储过程通常需要创建Recordset对象来接收返回的结果集。 ##### 4.2 没有输入输出的存储过程 这类存储过程主要用于修改数据库状态的操作,如删除记录等。例如,`delUserAll`存储过程用于删除userinfo表中的所有记录。 ```vb CREATE PROCEDURE dbo.delUserAll AS SET NOCOUNT ON BEGIN DELETE FROM dbo.userinfo END GO ``` 调用此类存储过程时不需要返回记录集,只需要执行存储过程即可。 #### 五、结论 通过本文的学习,我们可以了解到如何有效地利用ASP调用SQL Server中的存储过程,从而实现高效且安全的数据访问。无论是查询还是修改数据库,存储过程都能够极大地简化开发工作,并提升系统的整体性能。在实际项目中,合理地设计和使用存储过程是非常重要的一步。
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.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. 没有输入输出的存储过程
请看以下存储过程:
剩余19页未读,继续阅读
- QDNIUGE2013-06-22全是文字,有点枯燥
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术册投标文件的的查重
- 通信原理(第七版 樊昌信 曹丽娜)思维导图
- genad-hGridSample-test.hbm
- cvtocc-shanghai.hbm
- k8s安装ingress-nginx
- dnSpy-net-win32-222.zip
- mongoose-free-6.9
- 德普微一级代理 DP100N06MGL PDFN3.3*3.3 TRMOS N-MOSFET 60V, 8mΩ, 45A
- 【java毕业设计】SpringBoot+Vue幼儿园管理系统 源码+sql脚本+论文 完整版
- 德普微一级代理 DP021N03FGLI DFN5*6 DPMOS N-MOSFET 30V 180A 1.8mΩ