• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP > ASP程序与SQL存储过程结合使用详解

ASP程序与SQL存储过程结合使用详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了asp程序,asp程序下载,asp程序设计教程,asp程序设计培训机构,asp程序设计培训等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

定义总是很抽象。存储进程其实就是能完成一定操作的一组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"      '指定存储进

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP程序中常用的脚本语言
  • asp万用分页程序代码
  • ASP程序中使用断开的数据记录集的代码
  • asp程序定义变量比不定义变量速度快一倍
  • 让ASP程序自动运行的代码
  • asp 小偷采集程序原理与常用函数方法
  • ASP程序与SQL存储过程结合使用详解
  • asp 实现的冒泡排序程序
  • asp 采集程序常用函数分析
  • 把网页中的(电话,qq等数字)生成图片的ASP程序

相关文章

  • 2017-05-11Highlight patterns within strings
  • 2017-05-11ASP强制刷新网页和判断文件地址实例代码
  • 2017-05-11.NET Framework各版本(.NET2.0 3.0 3.5 4.0)区别
  • 2017-05-11js 不用重复检测浏览器提高效率
  • 2017-05-11Jmail发邮件的例子
  • 2017-05-11ASP常用函数收藏乱七八糟未整理版
  • 2017-05-11asp的通用数据分页类
  • 2017-05-11javascript asp教程错误处理
  • 2017-05-11ASP MSSQL存储过程的实现小例
  • 2017-05-11随机增加网站点击的一个不错的方法 原创

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 使用FSO修改文件夹的名称实现文件转移防盗链
    • asp中通过getrows实现数据库记录分页的一段代码
    • 随机提取N条记录 推荐
    • asp中将相对路径转换为绝对路径的函数代码
    • 深思 PHP 数组遍历的差异(array_diff 的实现)
    • 捌度空间 缓存类
    • 网站生成静态页面,及网站数据采集的攻、防原理和策略
    • asp 过滤尖括号内所有内容的正则代码
    • ASP编程入门进阶(九):内置对象Application
    • asp显示日历效果

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有