ASP中带参数调用MSSQL存储过程,返回数据集时出问题,请大家帮帮忙!谢谢!

dook158 2005-04-14 11:27:40

第一次使用ASP调用MSSQL存储过程,碰见一些问题,请大家帮忙看看!谢谢~
(写的多了点,有时间的朋友请帮忙看看,谢谢了!)

实现的目标是:
将数据按权限分离到临时表中,然后用户查询临时表中的数据,从而保证了用户的查询不越权。


在ASP+MSSQL存储过程中实现的目标是:
1.通过存储过程处理后返回的数据能正常返回到ASP的数据集里
2.并且ASP接收返回数据的数据集支持书签,可以利用AbsolutePage进行分页


目前程序结果:
无法返回数据集,ASP提示RS数据集关闭无法调用。 然后,我改了存储过程,仅保留测试返回数据集的两条语句,结果两条语句结果能返回,但是exec ('select * from yf')返回的数据,ASP中RS无法利用AbsolutePage进行分页。


全部程序代码如下:

--1。
--定义表yf
CREATE TABLE [yf] (
[id] [int] NOT NULL ,
[area] [varchar] (30) NULL ,
[room] [varchar] (30) NULL ,
[name] [varchar] (30) NULL ,

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
insert into yf (id,area,room,name) values (1,"1楼","1号","小11")
insert into yf (id,area,room,name) values (2,"1楼","2号","小21")
insert into yf (id,area,room,name) values (3,"1楼","3号","小31")
insert into yf (id,area,room,name) values (4,"1楼","1号","小12")
insert into yf (id,area,room,name) values (5,"1楼","2号","小22")
insert into yf (id,area,room,name) values (6,"1楼","2号","小23")


--2。
--定义存储过程t_yf_1
--实现目标:根据权限分离数据,再对分离的符合权限数据进行操作
--变量说明:@power_s 权限;@tab_s 数据表;@select_s 查询条件
--
if exists (select * from sysobjects where name='t_yf_1')
drop proc t_yf_1
GO


create procedure t_yf_1
@power_s varchar(50),@tab_s varchar(100),@select_s varchar(200)
as
--测试返回数据集
--select * from yf
--exec ('select * from yf')
--
CREATE TABLE #t1(
[id] [int] NOT NULL ,
[area] [varchar] (30) NULL ,
[room] [varchar] (30) NULL ,
[name] [varchar] (30) NULL ,

)

--转换双引号为单引号
set @power_s = REPLACE(@power_s,'"','''')
set @select_s = REPLACE(@select_s,'"','''')

--符合权限数据插入临时表
execute('Insert into #t1 select * from '+@tab_s+' where '+@power_s)

--对权限内数据查询返回结果集
execute('select * from #t1 where '+@select_s)

-- 释放
drop table #t1
GO



3。
<%
'ASP中调用存储过程代码

t_p="room='2号'"
cx="room='2号' and name='小22'"

t_p=replace(t_p,"'","""") '权限
t_t="yf" '数据表名称
cx=replace(cx,"'","""") '查询条件

'--
Set conn=Server.CreateObject("ADODB.Connection")
'sql数据库连接参数:数据库名、用户密码、用户名、连接名
Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
SqlDatabaseName = "yf_db"
SqlPassword = "sa"
SqlUsername = "sa"
SqlLocalName = "(local)"
ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"

conn.Open ConnStr
'---------
'set CmdSP = Server.CreateObject("ADODB.Command")
'CmdSP.ActiveConnection =conn
'CmdSP.CommandText = "t_yf_1"
'CmdSP.CommandType = 4
'CmdSP.Parameters.Append CmdSP.CreateParameter("@power_s", 200, 1, 50, t_p)
'CmdSP.Parameters.Append CmdSP.CreateParameter("@tab_s", 200, 1, 100, t_t)
'CmdSP.Parameters.Append CmdSP.CreateParameter("@select_s", 200, 1, 200, cx)
'set rs= CmdSP.Execute()
'
'---------为让记录集支持书签,AbsolutePage进行分页
set rs=server.CreateObject("adodb.recordset")
sql_s="Execute t_yf_1 '"&t_p&"','"&t_t&"','"&cx&"'"
rs.open sql_s,conn,1,1


Rs.PageSize = 2
RowCount = Rs.RecordCount

'默认显示第一页;
PageNo = 1
If RowCount <> 0 then Rs.AbsolutePage = PageNo

If Not rs.eof then
Do while Not rs.eof and RowCount>0 %>
<table>
<tr height="30" onMouseOver='this.style.backgroundColor="#C4E1FF"' onMouseOut='this.style.backgroundColor="#FFFFFF"'>
<td align="center" bgcolor="#FFFFFF" ><%=rs("id")%></td>
<td align="center" bgcolor="#FFFFFF" ><%=rs("area")%></td>
<td align="center" bgcolor="#FFFFFF" ><%=rs("room")%></td>
<td align="center" bgcolor="#FFFFFF" ><%=rs("name")%></td>
</tr>
</table>
<%
RowCount = RowCount - 1
rs.MoveNext
Loop
else %>
<table>
<tr height="30" onMouseOver='this.style.backgroundColor="#C4E1FF"' onMouseOut='this.style.backgroundColor="#FFFFFF"'>
<td align="center" bgcolor="#FFFFFF" >无信息</td>
</tr>
</table>
<%
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
...全文
250 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dook158 2005-04-19
  • 打赏
  • 举报
回复
underone(underone) 2005-04-14 15:57:00

可能是你的存储过程写错了

------------------------
能说说存储过程错在哪吗? 我写的存储过程都帖在上面了
liu0130 2005-04-15
  • 打赏
  • 举报
回复
我现在也遇到这种问题
不过我用的是返回表变量
在查询分析器一点问题都没有
在ASP的ado.recordset提示跟楼主一样的错误
目前还没有找到解决的方法
underone 2005-04-14
  • 打赏
  • 举报
回复
提示哪里的错误啊
HHH3000 2005-04-14
  • 打赏
  • 举报
回复
晕~~
眼好花哦~~~
一步一步除错吧~
你确定存储过程没错?
dook158 2005-04-14
  • 打赏
  • 举报
回复
在线等啊~ 有朋友帮忙看看没啊~!
underone 2005-04-14
  • 打赏
  • 举报
回复
可能是你的存储过程写错了
dook158 2005-04-14
  • 打赏
  • 举报
回复
有朋友能帮忙看看问题吗???在线等待啊~
dook158 2005-04-14
  • 打赏
  • 举报
回复
我把 数据库,存储过程,和调用存储过程的ASP代码都帖出来了, 不知道错在哪里???
dook158 2005-04-14
  • 打赏
  • 举报
回复
目前程序结果:
无法返回数据集,ASP提示RS数据集关闭无法调用。 然后,我改了存储过程,仅保留测试返回数据集的两条语句,结果两条语句结果能返回,但是exec ('select * from yf')返回的数据,ASP中RS无法利用AbsolutePage进行分页。

存储过程我都测试过的,数据传进去在查询分析器里能看见要得到的结果,但在ASP中用RS返回就有问题。

28,406

社区成员

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

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