ASP与sql存储过程

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修改如下:

相关内容推荐

周的天数

想在asp显示当前一周有多少天吗?这个代码会把握住今天的值和利用到案例选择显示一周的天数。 % date_value = date() %%= date_value %br% dayofweek=weekday(date_value) %day number in week %= dayofweek %br%

ASP-条件语句

有时,当我们写代码时,我们要为作出不同的决定而执行不同的操作。我们可以使用条件语句中的代码来做到这一点。条件语句是一套用于执行基于不同条件的不同动作的命令。 为了支

编写第一个ASP程序

现在有很多关于ASP编程的教程。其中有些是对于你有帮助,有些完全没有用。甚至有些写得是误人子弟。无论如何,你读过一些关于ASP的内容,现在你已经准备好构建第一个应用程序。

asp获取IP地址的函数

FunctionGetIp() DimDulIp,ProIP DulIp=Request.ServerVariables("HTTP_X_FORWARDED_FOR") ProIP=Request.ServerVariables("REMOTE_ADDR") IfDulIp=""Then GetIp=ProIP Else GetIp=DulIp EndIf EndFunction

ASP表单输入到HTML

ASP能写.html或者任何其他的直接到web服务器的文档文本(你需要写文本输出到写权限的目录)。这是能够不需要上传PC的文件用户输入即时的发布信息。 下面的例子有四个输入区域(标

返回
顶部