挑战高手:如何用ASP访问SQL SERVER创建的视图和存储过程

programbug 2002-05-13 03:54:07
我在SQL SERVER当中建立了视图和存储过程,并且有参数传递,不知在ASP程序当中如何调用,高分奉送!!!!!
...全文
90 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolbily 2002-05-14
  • 打赏
  • 举报
回复
算了算了,还是用utraldev吧,什么也不用写,用它数据绑定功能就可以了。
视图和表只要新建立一个recordset对象,存储过程只要建立command对象,完全可视。
jobine 2002-05-14
  • 打赏
  • 举报
回复
几种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")
'建立连结
CmdSP.ActiveConnection="Driver={SQL Server}; server=(local); Uid=sa; Pwd=; Database=Pubs"
'定义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
%>

其实这些都是在论坛中,用搜索就可以找到。试试看吧,会搜到很多。
许留心 2002-05-13
  • 打赏
  • 举报
回复
好处是不容易被截获SQL请求,封闭。

对于存储过程我觉得难的是记录集的分页问题,曾经困扰我很长时间,现在我解决了,虽然csdn上有帖子,我还是把它贴出来,希望能容易的帮你,分不分的其实并不重要。

<!--#include virtual="adovbs.inc"-->
<%
set conn=server.createobject("adodb.connect")
set rs=server.createobject("adodb.command")
set mycmd=server.createobject("adodb.recordset")
rs.cursorlocation=3 'vbs中没有对常量adopenStatic的定义,所以要给出它的数值,或者先定义它.
conn.open "dsn=emlc"
set mycmd.activeconnect=conn
mycmd.commandtype=adcmdstoredpro
mycmd.commandtext="区域显示"
rs.open mycmd,,3
%>
tolimit 2002-05-13
  • 打赏
  • 举报
回复
我一直不太明白视图和存储过程与表查询的作用好在哪里
cmsoft 2002-05-13
  • 打赏
  • 举报
回复
你可以把视图作为表来用
julyclyde 2002-05-13
  • 打赏
  • 举报
回复
View没有参数吧?
我记得和Table一样用
Jeroki 2002-05-13
  • 打赏
  • 举报
回复
con.execute("exec store_proc ")
or
con.execute("exec store_proc ['"&name&"']")

store_proc is storeprocedure name,the 'name' is input var;
if not neccessary,the string in [] can be cut off
Jeroki 2002-05-13
  • 打赏
  • 举报
回复
con.execute("select * from view_1")
view_1 is view name;
programbug 2002-05-13
  • 打赏
  • 举报
回复
谢谢楼上大侠的指点, 这里真是高手如云,但不知怎样调用视图呢
zoubaosheng1983 2002-05-13
  • 打赏
  • 举报
回复
上面是一种方法啦.
ado对象模型还可以有Recordset
如:
set rc=server.createobject("adodb.recordset")
rc.open "存储过程名","conection(数据库存连接对象)",1,3,adcmdstoredproc

以上就可以啦
Pasp 2002-05-13
  • 打赏
  • 举报
回复
来晚了,答案同上 也给分吧
Bird008 2002-05-13
  • 打赏
  • 举报
回复
利用commamd对象。
set objComm=server.createobject("ADODB.Command")
objComm.commandtext="存储过程名"
objComm.commandtype=adCmdStoredProc
objComm.parameters.apend objComm.createparameter("属性名",类型,长度,adCmdInput/adCmdOutput)
objComm.parameters("属性名")=值
objComm.execute

试图与表的查询一样。

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧