• 5040阅读
  • 0回复

在ASP中使用存储过程[supfrie] [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-07-30
  使用SQL Server数据库,你可使用存储过程直接在数据库中存储并运行功能强大的任务,而不在自己的ASP脚本中实现它们,因为存储过程位于数据库服务器上,因而具有更高的性能并能减少网络负载。本文旨在通过实例说明在ASP中如何调用存储过程并传递输入参数的方法。

  下面我们就通过一个实例来说明这种技术的使用方法(文件adovbs.inc可在C:\Program Files\Common Files\System\ADO下找到):

安装SQL Server后,数据库pubs中自带存储过程byroyalty,语句为(@percentage就是输入参数):

Alter PROCEDURE byroyalty @percentage int

AS

select au_id from titleauthor

where titleauthor.royaltyper = @percentage

ASP源程序:

<% @LANGUAGE = VBScript %>

<!--#include file="adovbs.inc"-->

<%

Response.Expires = 0

Dim Cnn, objRS,strConn,objCmd, objParam

Const strIn = 30    '存储过程的输入参数,为简化程序, 直接设置该值.



' 建立连接

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

strConn ="Provider=sqloledb;" & _

   "Data Source=16.62.5.8;Initial Catalog=pubs;User Id=sa;Password=;"

Cnn.Open strConn



' 创建Command对象

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

objCmd.CommandText = "byroyalty"     '存储的过程名

objCmd.CommandType = adCmdStoredProc   '将 CommandText 作为存储过程名进行计算

Set objCmd.ActiveConnection = Cnn



'创建并定义参数

Set objParam = objCmd.CreateParameter ("@percentage", adInteger, adParamInput, 4, strIn)

objCmd.Parameters.Append objParam



Set objRS = objCmd.Execute()

%>

<HTML>

<BODY>

下面输出结果, 输入参数为:

<%= objCmd.Parameters("@percentage") %> .

<BR><BR> au_id<Br>

<%

While Not objRS.EOF

Response.Write Server.HTMLEncode(objRS("au_id")) & "<Br>"

objRS.MoveNext

Wend



objRS.close: Cnn.close

Set objRS = Nothing: Set Cnn = Nothing

Set objParam = Nothing: Set objCmd = Nothing

%>

</BODY>

</HTML>

***************************************************************
为了提高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来检查语法。

在上例中,表示建立存储过程名为proctest,带3个参数的存储过过程,其中第一个参数mycola数据类型为char,宽度10;第2个参数数据类型为char,宽度为10,第3个参数数据类型为text,在这里使用的是Sql Server的数据类型。

存储过程建立后,下面就是如何在Asp程序中调用该存储过程:在Asp中调用存储过程
<%
Set con = Server.CreateObject("ADODB.Connection")
con.open "DRIVER=SQL Server; SERVER=webdata; DATABASE=mydatabasename; UID=sa; PWD="
set cm = Server.CreateObject("ADODB.Command")
Set cm.ActiveConnection = con
cm.CommandText = "proctest" '与Sql Server中建立的存储过程名称对应
cm.CommandType = 4     'CommandType表示存储过程
set p = cm.Parameters
p.Append cm.CreateParameter("@mycola",202,1,10) '下面为Command增加3个参数
p.Append cm.CreateParameter("@mycolb",130,1,10)
p.Append cm.CreateParameter("@mycolc",201,1,250)
cm("@mycola")="2000-06-31"
cm("@mycolb")="14:13:25"
cm("@mycolc")="存储过程技术测试一"
cm.execute
cm("@mycola")="2000-06-31"
cm("@mycolb")="14:15:25"
cm("@mycolc")="存储过程技术测试二"
cm.execute
cm("@mycola")="2000-06-31"
cm("@mycolb")="14:16:25"
cm("@mycolc")="存储过程技术测试三"
cm.execute
con.close
set con=nothing
%>
在上面的增加参数的语句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       允许从一子程序中返回数据至该参数当中
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个