设为首页
收藏本站
最新电影
> 子栏目 Asp | Jsp | XML | XSL | Div+Css | 自定义函数 | 数据库 | 脚本特效
您现在的位置: 首页=>后台技术=>数据库 订阅本栏目  
ASP中调用存储过程、语法、写法
时间: 2007-09-27 22:28:47 阅读次数:11689

第 1 页 ASP中调用存储过程、语法、写法[1]
第 2 页 ASP中调用存储过程、语法、写法[2]
第 3 页 ASP中调用存储过程、语法、写法[3]
第 4 页 ASP中调用存储过程、语法、写法[4]
第 5 页 ASP中调用存储过程、语法、写法[5]
第 6 页 ASP中调用存储过程、语法、写法[6]



  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集合来声明参数:

 



以下是代码片段:
/*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
   
    在MyComm.CreateParameter("RETURN",2,4)中,各参数的含义如下:
    第一个参数("RETURE")为参数名参数名可以任意设定,但一般应与存储过程中声明的参数名相同飞飞Asp技术!乐园此处是返回值,我习惯上设为"RETURE";
    第二个参数(2),表明该参数的数据类型,具体的类型代码请参阅ADO参考,以下给出常用的类型代码:
    adBigInt: 20 ;
    adBinary : 128 ;
    adBoolean: 11 ;
    adChar: 129 ;
    adDBTimeStamp: 135 ;
    adEmpty: 0 ;
    adInteger: 3 ;
    adSmallInt: 2 ;
    adTinyInt: 16 ;
    adVarChar: 200 ;
   
对于返回值,只能取整形,且-1到-99为保留值;
    第三个参数(4),表明参数的性质,此处4表明这是一个返回值飞飞,Asp技术乐园此参数取值的说明如下:
    0 : 类型无法确定; 1: 输入参数;2: 输入参数;3:输入或输出参数;4: 返回值
   
    以上给出的ASP代码,应该说是完整的代码,也即最复杂的代码,其实





    Set Mypara = MyComm.CreateParameter("RETURN",2,4)
    MyComm.Parameters.Append MyPara
       
    可以简化为





    MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)





    甚至还可以继续简化,稍后会做说明
    对于带参数的存储过程,只能使用Command对象调用(也有资料说可通过Connection对象或Recordset对象调用,但我没有试成过)






   
4. 有输入参数和输出参数的存储过程
    返回值其实是一种特殊的输出参数在大多数情况下,我们用到的是同时有输入及输出参数的存储过程,比如我们想取得用户信息表中,某ID用户的用户名,这时候,有一个输入参数----用户ID,和一个输出参数----用户名实现这一功能的存储过程如下:





    /*SP4*/
    CREATE PROCEDURE dbo.getUserName
       @UserID int,
       @UserName varchar(40) output
    as
    set nocount on
    begin
       if @UserID is null return
       select @UserName=username
           from dbo.[userinfo]
           where userid=@UserID
       return
    end
    go





    调用该存储过程的ASP代码如下:





    '**调用带有输入输出参数的存储过程**
    DIM MyComm,UserID,UserName
    UserID = 1
    Set MyComm = Server.CreateObject("ADODB.Command")
    MyComm.ActiveConnection = MyConStr          'MyConStr是数据库连接字串
    MyComm.CommandText      = "getUserName"     '指定存储过程名
    MyComm.CommandType      = 4                 '表明这是一个存储过程
    MyComm.Prepared         = true              '要求将SQL命令先行编译
    '声明参数
    MyComm.Parameters.append MyComm.CreateParameter("@UserID",3,1,4,UserID)
    MyComm.Parameters.append MyComm.CreateParameter("@UserName",200,2,40)
    MyComm.Execute
    '取得出参
    UserName = MyComm(1)
    Set MyComm = Nothing





    在以上代码中,可以看到,与声明返回值不同,声明输入参数时需要5个参数,声明输出参数时需要4个参数声明输入参数时5个参数分别为:参数名、参数数据类型、参数类型、数据长度、参数值飞飞Asp技术.乐园声明输出参数时,没有最后一个参数:参数值
   
需要特别注意的是:在声明参数时,顺序一定要与存储过程中定义的顺序相同,而且各参数的数据类型、长度也要与存储过程中定义的相同
   
如果存储过程有多个参数,ASP代码会显得繁琐,可以使用with命令简化代码:





    '**调用带有输入输出参数的存储过程(简化代码)**
    DIM MyComm,UserID,UserName
    UserID = 1
    Set MyComm = Server.CreateObject("ADODB.Command")
    with MyComm
       .ActiveConnection = MyConStr          'MyConStr是数据库连接字串
       .CommandText      = "getUserName"     '指定存储过程名
       .CommandType      = 4                 '表明这是一个存储过程
       .Prepared         = true              '要求将SQL命令先行编译
       .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
       .Parameters.append .CreateParameter("@UserName",200,2,40)
       .Execute
    end with
    UserName = MyComm(1)
    Set MyComm = Nothing
   
    假如我们要取得ID为1到10,10位用户的用户名,是不是要创建10次Command对象呢?不是的如果需要多次调用同一存储过程,只需改变输入参数,就会得到不同的输出:





    '**多次调用同一存储过程**
    DIM MyComm,UserID,UserName
    UserName = ""
    Set MyComm = Server.CreateObject("ADODB.Command")
    for UserID = 1 to 10
       with MyComm
          .ActiveConnection = MyConStr          'MyConStr是数据库连接字串
          .CommandText      = "getUserName"     '指定存储过程名
          .CommandType      = 4                 '表明这是一个存储过程
          .Prepared         = true              '要求将SQL命令先行编译
          if UserID = 1 then
             .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
             .Parameters.append .CreateParameter("@UserName",200,2,40)
             .Execute
          else
             '重新给入参赋值(此时参数值不发生变化的入参以及出参不必重新声明)
             .Parameters("@UserID") = UserID
             .Execute
          end if
       end with
       UserName = UserName + MyComm(1) + ","    '也许你喜欢用数组存储
    next
    Set MyComm = Nothing





    通过以上代码可以看出:重复调用同一存储过程时,只需为值发生改变的输入参数重新赋值即可,这一方法在有多个输入输出参数,且每次调用时只有一个输入参数的值发生变化时,可以大大减少代码量



[上一页] [下一页]
站内搜索    

下一篇T-SQL 中 SET NOCOUNT ON 的含义

上一篇数据类型详解 MSSQL

本栏目最新 栏目最新列表
access由于您和其他用户试图同时改变同一数
Microsoft SQL Server 2005 Service Pack 3
MySQL时间戳转换的方法
清除,删除表中数据的方法
mysql常用时间函数用法解释
网站优化策划 栏目最新列表
增加网站外链的快速方法
网站上线前必做的30个检查
新的友情链接参考标准(没有google的PR情况
优化Google的AdSense广告的五个工具
王通讲SEO八大基础
站点最新 站点最新列表
微博推广的一些技巧
xhEditor v1.1.7 发布,
收集的一些轻量级非常实
50个新鲜兼容最新版本的
javascript中cookie的设
Excel中出现#VALUE!、#D
jquery插件:飞飞表情插件
十个使用HTML5开发的精彩
支持HTML5的浏览器有哪些
飞妮莫属:漫画:如何写出
历史最热10条信息  
MIME介绍 及 [1] [2] [3]
巧用Google和迅雷来下载
Transact SQL 常 [1] [2]
VIA Rhine II Fast Ethe
电脑常用端 [1] [2] [3]
Do you get a kick out
十道羊皮卷 欣赏+mp3版+
每日一句:A friend and
每日一句:Theres no tu
经典__悟透JavaScript
相关文章
ASP中调用存储过程、
ASP中调用存储过程、
使用存储过程的优势
sql的存储过程接受表
在存储过程中对符号
无限级分类Sql存储过
飞飞Asp无限级分类v
飞飞Asp无限级分类v
使用存储过程的优点
SQL存储过程的编写经
 
 width= 
伟哥博客 西安房产 123最新电影 三四六四