ASP中带参数调用MSSQL存储过程,返回数据集时出问题,请大家帮帮忙!谢谢!
第一次使用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
%>