zoukankan      html  css  js  c++  java
  • ASP如何调用存储过程(转)

    1.ASP调用存储过程

    首先在SQL里建立一个数据库叫it,怎么建我就不说了,这个简单,一看就知道了。然后在库里建个表,写几个数据记录,如下:

    ASP调用存储过程  - jinhui_email@126 - 帝S-Bingyu

    ASP调用存储过程  - jinhui_email@126 - 帝S-Bingyu

    打开查询分析器:

    ASP调用存储过程  - jinhui_email@126 - 帝S-Bingyu

    在里边写下如下语句点击绿色按钮执行它:

    ASP调用存储过程  - jinhui_email@126 - 帝S-Bingyu

    你到数据库的存储过程里面看,已经多了一个名为upGetUserName的存储过程了表明已经成功的建立了存储过程,如果没有,试着刷新下。

    ASP调用存储过程  - jinhui_email@126 - 帝S-Bingyu

    下面用ASP来调用它:

    CONN文件(连接数据库)如下:

    <%

    set db=server.createobject("adodb.connection")

    db.Open ("driver={SQL Server};server=192.168.18.254;uid=sa;pwd=;database=it;")

    %>

    192.168.18.254为SQL SERVER服务器的IP地址,uid pwd it 分别为连接数据库的用户和密码及所要连的数据库

    新建一个index.asp文件,内容如下:

    <!--#include file="conn.asp" -->

    <%

    set rs=server.createobject("adodb.recordset")

    sql = "exec upGetUserName"

    rs.open sql,db,3,2

    response.write rs.recordcount&"<br>"

    while not rs.eof

        response.write rs("uname")&"<br>"

        rs.movenext

    wend

    response.End

    %>

    在浏览器中执行这个页面如果显示如下:

    ASP调用存储过程  - jinhui_email@126 - 帝S-Bingyu

    那么恭喜你,成功了!

    上面是不带参数的存储过程调用,但我们在使用中一定会有参数的,下面就来介绍一个有参数的。

    还是上边的例子,我们把原来的存储过程改成这样:

    CREATE PROC upGetUserName

    @intUserId        NVARCHAR(50),

    @intUserpass        NVARCHAR(50)    

    AS

    BEGIN

            SELECT uname FROM users WHERE uId=@intUserId and pass=@intUserpass

    END

    GO

    可以把原来的存储过程删除,然后把这个写在查询分析器里来执行,也可以直接在原来的存储过程里改。

    @intUserId NVARCHAR(50),

    @intUserpass NVARCHAR(50)

    是要传送进来的参数,@是必须的,因为有两个,所以之间用“,”来分隔

    index文件改成如下:

    <!--#include file="conn.asp" -->

    <%

    set rs=server.createobject("adodb.recordset")

    sql = "exec upGetUserName 'snake','snake'"

    rs.open sql,db,3,2

    response.write rs.recordcount&"<br>"

    while not rs.eof

        response.write rs("uname")&"<br>"

        rs.movenext

    wend

    response.End

    %>

    注意:sql = "exec upGetUserName 'snake','snake'"

    两个snake不是一个意思,一个是uid,一个是pass,存储过程返回的是uid="snake"并且pass="snake"的记录

    数据库里只有一条这样的记录,所以会显示:

    ASP调用存储过程  - jinhui_email@126 - 帝S-Bingyu

    ASP存储过程使用大全

    1,调用没有参数的存储过程

    <%

    set conn=server.CreateObject("adodb.connection")

    set cmd=server.CreateObject("adodb.command")

    strconn="dsn=pubs;uid=sa;pwd"

    conn.Open strconn

    set cmd.ActiveConnection=conn

    cmd.CommandText="{call nono}"

    'set rs=cmc.exe 或者cmd.execute

    set rs=cmd.Execute()

    %>

    2,一个输入的参数的存储过程

    <%

    set conn=server.CreateObject("adodb.connection")

    set cmd=server.CreateObject("adodb.command")

    strconn="dsn=pubs;uid=sa;pwd"

    conn.Open strconn

    set cmd.ActiveConnection=conn

    cmd.CommandText="{call oneinput(?)}"

    cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger ,adParamInput )

    cmd("@aaa")=100

    cmd.Execute()

    %>

    3,一个输入参数和一个输出的参数

    <%

    set conn=server.CreateObject("adodb.connection")

    set cmd=server.CreateObject("adodb.command")

    strconn="dsn=pubs;uid=sa;pwd"

    conn.Open strconn

    set cmd.ActiveConnection=conn

    cmd.CommandText = "{call oneinout(?,?)}"

    cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger,adParamInput)

    cmd("@aaa")=10

    cmd.Parameters.Append cmd.CreateParameter("@bbb",adInteger,adParamOutput)

    cmd.Execute()

    bbb=cmd("@bbb")

    %>

    4,一个输入参数,一个输出参数,和一个返回值

    <%

    set conn=server.CreateObject("adodb.connection")

    set cmd=server.CreateObject("adodb.command")

    strconn="dsn=pubs;uid=sa;pwd"

    conn.Open strconn

    set cmd.ActiveConnection=conn

    cmd.CommandText="{?=call onereturn(?,?)}"

    cmd.Parameters.Append cmd.CreateParameter("@return_value",adInteger,adParamReturnValue )

    cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger,adParamInput )

    cmd("@aaa")=10

    cmd.Parameters.Append cmd.CreateParameter("@bbb",adInteger,adParamOutput)

    cmd.Execute()

    bbb=cmd("@bbb")

    rrr=cmd("@return_value")

    %>

    如何在ASP中调用SQL存储过程

    <%set connection1 = Server.CreateObject("ADODB.Connection")

    connection1.open ... '联接

    set command1=Server.CreateObject("ADODB.command")

    set command1.activeconnection=connection1

    command1.commandtype=4

    command1.commandtext="sp_1" 'SP 名

    command1.parameters(1)=... '参数值

    command1.parameters(2)=...

    set recordset1=command1.execute()

    %>

    ASP调用存储过程的技巧

    1、最简单的如下

    Dim objConn

    Set objConn = Server.CreateObject("ADOBD.Connection")

    objConn.Open Application("Connection_String")

    'Call the stored procedure to increment a counter on the page

    objConn.Execute "exec sp_AddHit"

    没有参数,没有返回,没有错误处理,就是这个了

    2、带参数的一种调用

    objConn.Execute "exec sp_AddHit 'http://www.aspalliance.com', 1"

    请注意分割参数,该方法也不返回记录

    3、返回记录的

    Dim objConn

    Dim objRs

    Set objConn = Server.CreateObject("ADOBD.Connection")

    Set objRs = Server.CreateObject("ADOBD.Recordset")

    objConn.Open Application("Connection_String")

    'Call the stored procedure to increment a counter on the page

    objRs.Open objConn, "exec sp_ListArticles '1/15/2001'"

    'Loop through recordset and display each article

    4、……

    Dim objConn

    Dim objCmd

    'Instantiate objects

    Set objConn = Server.CreateObject("ADODB.Connection")

    set objCmd = Server.CreateObject("ADODB.Command")

    conn.Open Application("ConnectionString")

    With objCmd

    .ActiveConnection = conn 'You can also just specify a connection string here

    .CommandText = "sp_InsertArticle"

    .CommandType = adCmdStoredProc 'Requires the adovbs.inc file or typelib meta tag

    'Add Input Parameters

    .Parameters.Append .CreateParameter("@columnist_id", adDouble, adParamInput, , columnist_id)

    .Parameters.Append .CreateParameter("@url", adVarChar, adParamInput, 255, url)

    .Parameters.Append .CreateParameter("@title", adVarChar, adParamInput, 99, url)

    .Parameters.Append .CreateParameter("@description", adLongVarChar, _

    adParamInput, 2147483647, description)

    'Add Output Parameters

    .Parameters.Append .CreateParameter("@link_id", adInteger, adParamOutput, , 0)

    'Execute the function

    'If not returning a recordset, use the adExecuteNoRecords parameter option

    .Execute, , adExecuteNoRecords

    link_id = .Parameters("@link_id")

    End With

    5、存储过程的代码

    Create PROCEDURE dbo.sp_InsertArticle

    (

    @columnist_id int,

    @url varchar(255),

    @title varchar(99),

    @description text

    @link_id int OUTPUT

    )

    AS

    BEGIN

    INSERT INTO dbo.t_link (columnist_id,url,title,description)

    VALUES (@columnist_id,@url,@title,@description)

    SELECT @link_id = @@IDENTITY

    END

    ASP调用带参数存储过程的几种方式

    最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数存储过程的方法。

    1 这也是最简单的方法,两个输入参数,无返回值:

    set connection = server.createobject("adodb.connection")

    connection.open someDSN

    Connection.Execute "procname varvalue1, varvalue2"

    ''将所有对象清为nothing,释放资源

    connection.close

    set connection = nothing

    2 如果要返回 Recordset 集:

    set connection = server.createobject("adodb.connection")

    connection.open someDSN

    set rs = server.createobject("adodb.recordset")

    rs.Open "Exec procname varvalue1, varvalue2",connection

    ''将所有对象清为nothing,释放资源

    rs.close

    connection.close

    set rs = nothing

    set connection = nothing

    3 以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。

    首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存

    储这些值的变量名称需要在调用参数中先行指定。

    这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?)

    存储过程如下:

    use pubs

    GO

    -- 建立存储过程

    create procedure sp_PubsTest

    -- 定义三个参数变量,注意第三个,特别标记是用于输出

    @au_lname varchar (20),

    @intID int,

    @intIDOut int OUTPUT

    AS

    SELECT @intIDOut = @intID + 1

    SELECT *

    FROM authors

    WHERE au_lname LIKE @au_lname + ''%''

    --直接返回一个值

    RETURN @intID + 2

    调用该存储过程的asp程序如下:

    <%@ Language=VBScript %>

    <%

    Dim CmdSP

    Dim adoRS

    Dim adCmdSPStoredProc

    Dim adParamReturnValue

    Dim adParaminput

    Dim adParamOutput

    Dim adInteger

    Dim iVal

    Dim oVal

    Dim adoField

    Dim adVarChar

    ‘这些值在 VB 中是预定义常量,可以直接调用,但在 VBScript 中没有预定义

    adCmdSPStoredProc = 4

    adParamReturnValue = 4

    adParaminput = 1

    adParamOutput = 2

    adInteger = 3

    adVarChar = 200

    iVal = 5

    oVal = 3

    ''建一个command对象

    set CmdSP = Server.CreateObject("ADODB.Command")

    ''定义command 对象调用名称

    CmdSP.CommandText = "sp_PubsTest"

    ''设置command调用类型是存储过程 (adCmdSPStoredProc = 4)

    CmdSP.CommandType = adCmdSPStoredProc

    ''往command 对象中加参数

    ''定义存储过程有直接返回值,并且是个整数,省缺值是4

    CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)

    ''定义一个字符型输入参数

    CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")

    ''定义一个整型输入参数

    CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)

    ''定义一个整型输出参数

    CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)

    ''运行存储过程,并得到返回记录集

    Set adoRS = CmdSP.Execute

    ''把每个记录打印出来,其中的字段是虚拟的,可以不用管

    While Not adoRS.EOF

    for each adoField in adoRS.Fields

    Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF

    Next

    Response.Write "<br>"

    adoRS.MoveNext

    Wend

    ''打印两个输出值:

    Response.Write "<p>@intIDOut = “ & CmdSP.Parameters("@intIDOut").Value & "</p>"

    Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"

    ''大扫除

    Set adoRS = nothing

    Set CmdSP.ActiveConnection = nothing

    Set CmdSP = nothing

    %>

    此外还有其他方式,稍微偏门一些,以后慢慢再说,本文参考了多篇文章,这里不一一列出。

    在Asp中使用存储过程

    为了提高Asp程序的效率,有时需要在Asp中使用使用Sql Server的存储技术,下面简单作一个介绍。

    存储过程的建立

    这里只简单介绍如何在Sql Server的企业管理器中如何建立存储过程:

    (1)打开企业管理器Enterprise manager

    (2)选择服务器组(SQL Server Group)、服务器、数据库(Database)以及相就的数据库,鼠标右击对应数据库下的Stored Procdures项,在弹出的菜单中选择New Stored Procedure,在Stored Procedures Properties中输入建立存储过程的语句。下面是一个例子:

    CREATE PROCEDURE proctest @mycola Char(10),@mycolb Char(10),@mycolc text AS

    Insert into chatdata (mycola,mycolb,mycolc) values(@mycola,@mycolb,@mycolc)

    在Sql Server的文档中它的语法为:

    CREATE PROC[EDURE] procedure_name [;number] [

    {@parameter data_type} [VARYING] [= default] [OUTPUT] ]

    [,...n] [WITH { RECOMPILE | ENCRYPTION

    | RECOMPILE, ENCRYPTION } ] [FOR REPLICATION] AS

    sql_statement [...n]

    如果你对Sql语法不熟悉,可以使用Check Syntax来检查语法。在上例中,表示建立存储过程名为mycola,带3个参数的存储过过程,其中第一个参数mycola数据类型为char,宽度10;第2个参数数据类型为char,宽度为10,第3个参数数据类型为text,在这里使用的是Sql Server的数据类型。

    存储过程建立后,下面就是如何在Asp程序中调用该存储过程:在Asp中调用存储过程 为了提高Asp程序的效率,有时需要在Asp中使用使用Sql Server的存储技术,下面简单作一个,在上面的增加参数的语句p.Append cm.CreateParameter("@mycolc",201,1,250)中,格式为:

    p.Append cm.CreateParameter("参数名称",类型,方向,大小)

    参许参数值的类型的意义如下:

    名称值 整数值 功能

    adDBTimeStamp 135 日期时间数据类型

    adDecimal 14 十进制整数值

    adDouble 5 双精度小数值

    adError 10 系统错误信息

    AdGUID 72 全域性唯一识别字(Globally unique identifier)

    adDispath 9 COM/OLE自动对象(Automation Object)

    adInteger 3 4字节有符号整数

    adIUnknown 13 COM/OLE对象

    adLongVarBinary 205 大型2字节值

    adLongVarChar 201 大型字符串值

    adLongVarWChar 203 大型未编码字符串

    adNumeric 131 十进制整数值

    adSingle 4 单精度浮点小数

    adSmallInt 2 2字节有符号整数

    adTinyInt 16 1字节有符号整数

    adUnsignedBigInt 21 8字节无符号整数

    adUnsignedInt 19 4字节无符号整数

    adUnsignedSmallInt 18 2字节无符号整数

    adUnsignedTinyInt 17 1字节无符号整数

    adUserDefined 132 用户自定义数据类型

    adVariant 12 OLE对象

    adVarBinary 204 双字节字符变量值

    adVarChar 200 字符变量值

    advarchar 202 未编码字符串变量值

    adWchar 130 未编码字符串

    方向值的意义如下:

    名称值 整数值 功能

    adParamInput 1 允许数据输入至该参数当中

    adParamOutput 2 允许数据输出至该参数当中

    adParamInputOutput 3 允许数据输入、输出至该参数当中

    adparamReturnValue 4 允许从一子程序中返回数据至该参数当中

    更多详细资源请参考Sql Server的文档和IIS的文档资源。

  • 相关阅读:
    SpringBoot-Swagger
    SpringBoot-Shiro
    SpringBoot-SpringSecurity
    SpringBoot-整合数据库
    SpringBoot-Web开发
    SpringBoot-基础
    SpringMVC-文件上传和下载
    SpringMVC-拦截器
    SpringMVC-AJAX
    Eclipse的安装
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/2404982.html
Copyright © 2011-2022 走看看