ASP调用SQL存储过程


简单的一个SQL语句:
select ID,Name,Picture,Time,Duty from employ
我们可以创建一个存储过程:
CREATE PROCEDURE sp_employ
AS
select ID,Name,Picture,Time,Duty from employ
Go
而SQL语句:
select ID,Name,Picture,Time,Duty from employ where ID=10230
对应的存储过程是:(用Alter替换我们已有的存储过程)
ALTER PROCEDURE sp_employ
@inID int
AS
select ID,Name,Picture,Time,Duty from employ where ID=@inID
Go
下面对比一下SQL和存储过程在ASP中的情况。首先看看直接执行SQL的情况:
<%
dim Conn, strSQL, rs
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=webData;uid=user;pwd=password"
strSQL = "select ID,Name,Picture,Time,Duty from employ "
Set rs = Conn.Execute(strSQL)
%>
再看看如何执行Stored Procedure:
<%
dim Conn, strSQL, rs
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=webData;uid=user;pwd=password" ’make connection
strSQL = "sp_employ"
Set rs = Conn.Execute(strSQL)
%>
而执行带参数的Stored Procedure也是相当类似的:
<%
dim Conn, strSQL, rs, myInt
myInt = 1
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=webData;uid=user;pwd=password"
strSQL = "sp_myStoredProcedure " & myInt
Set rs = Conn.Execute(strSQL)
%>
在SQL Server中执行存储过程
在SQL Server的查询分析器中,输入以下代码:
declare @tot_amt int
execute order_tot_amt 1,@tot_amt output
select @tot_amt
以上代码是执行order_tot_amt这一存储过程,以计算出定单编号为1的定单销售金额,我们定义@tot_amt为输出参数

,用来承接我们所要的结果
在ASP中调用存储过程
+展开
-HTML
<--必须加载adovbs.inc文件,否则将出错--> 
<--#include file="adovbs.inc"--> 
<% 
dim objCnn 
dim objCmd 
dim Rs 
const o_id=112 
'-----建立Connection对象---------- 
set objCnn=Server.CreateObject("Adodb.connection"
objCnn.Open "driver={sql server};server=localhost;uid=sa;pwd=cncanet;database=check;" 
'-----建立Command对象----------- 
set objCmd=Server.CreateObject("Adodb.Command"
objCmd.ActiveConnection=objCnn 
objCmd.CommandText="order_tot_amt" '指定存储过程名称 
objCmd.CommandType=adCmdStoredProc '其为Stored Procedure 
'-----准备stored procedure 的参数------- 
objCmd.Parameters.Append _ 
objCmd.CreateParameter("o_id",adInteger,adParamInput,,o_id) 
objCmd.Parameters.Append _ 
objCmd.CreateParameter("p_tot",adBigInt,adParamOutput,,0) 
'-----执行存储过程---------------------- 
objCmd.Execute 
'-----输出参数以及处理结果-------------- 
for each parm in objCmd.Parameters 
Response.Write parm.name &"="trim(parm) &"<br>" 
next 
%>
'============================================

一些不常见的ASP调用存储过程的技巧- -



一些不常见的ASP调用存储过程的技巧

1、最简单的如下
+展开
-VBScript
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、返回记录的
+展开
-VBScript
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、……
+展开
-VBScript
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、存储过程的代码
+展开
-SQL
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

加支付宝好友偷能量挖...


评论(0)网络
阅读(115)喜欢(0)SQL及数据库