作者:mobiledu2502874403 | 来源:互联网 | 2022-12-12 23:35
有这样一个存储过程:CREATEPROCEDUREGetRecordFromPage2@sqlstrnvarchar(4000),--查询字符串@pagecountint,
有这样一个存储过程:
CREATE PROCEDURE GetRecordFromPage2
@sqlstr nvarchar(4000), --查询字符串
@pagecount int, --第N页
@pagesize int --每页行数
AS
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select @rowcount as rowSum,ceiling(1.0*@rowcount/@pagesize) as pageSum,@pagecount as Page
set @pagecount=(@pagecount-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@pagecount,@pagesize
exec sp_cursorclose @P1
set nocount off
GO
--------------
我执行语句
GetRecordFromPage2 [SQL语句....],1,10
返回结果是
id imgname imgurl
----------- -------------------- ----------------------------------------
rowSum pageSum Page
----------- -------------------------- -----------
2452 246 1
id imgname imgurl
----------- -------------------- ----------------------------------------
1317 冯小刚 /mmsimg/comm/7210/dt2.jpg
52212 憨豆先生 /mmsimg/comm/7210/278567.jpg
60833 大山 /mmsimg/comm/7210/dt3.jpg
20872 梁天 /mmsimg/comm/7210/dt8.jpg
73430 刘欢 /mmsimg/comm/7210/278300.jpg
52237 葛优 /mmsimg/comm/7210/278292.jpg
73074 崔永元 /mmsimg/comm/7210/dt4.jpg
40579 米卢 /mmsimg/comm/7210/dt9.jpg
4108 关之琳 /mmsimg/comm/7210/dt1.jpg
54087 葛优 /mmsimg/comm/7210/dt10.jpg
问题是,这个存储过程,一次返回3个结果集,我不知道怎么用ADO对象分别取得各个结果集的数据。
11 个解决方案
SqlDataAdapter myDataAdapter = new SqlDataAdapter("GetRecordFromPage2",myConnection);
myDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
myDataAdapter.SelectCommand.Parameters.Add("@sqlstr",sqlstr);
myDataAdapter.SelectCommand.Parameters.Add("@pagecount",pagecount);
myDataAdapter.SelectCommand.Parameters.Add("@pagesize",pagesize);
DataSet ds = new DataSet();
myDataAdapter.Fill(ds);
return ds;
ds.Tables[0],ds.Tables[1],ds.Tables[2],分别对应三个结果集
如果是ASP,他用的是ADO,不是ADO.net,那怎么分别取得3个结果集呢?
<% set cmm=server.createobject("adodb.command")
set rs=server.createobject("adodb.recordset")
cmm.commandtype=4
cmm.activecOnnection=conn
cmm.commandtext="proc_name"
set rs=cmm.execute
cmm.execute %>
<% while not rs.eof
response.write rs(0)
rs.movenext
wend
%>
<%
set rs2=rs.NextRecordset()
while not rs2.eof
response.write rs2(0)
rs2.movenext
wend
...........
rs2.close
set rs2=nothing %>
如果是在asp.net中就不用这样了,取就更方便了,如果返回dataset则用索引就可以了
<%
sqlstr="GetRecordFromPage2 [select a.id,a.imgname,a.imgurl from colorpic a,picmobile b where left(a.classid,4)='1020' and mobileid='0102' and a.id=b.picid],3,10"
set bb = Server.CreateObject("ADODB.Recordset")
bb.open sqlstr,conn,3,1
do while not bb.eof
Response.write bb(0)
bb.movenext
loop
set tt=bb.NextRecordset()
do while not tt.eof
Response.write tt(0)
tt.movenext
loop
set tt1=bb.NextRecordset()
do while not tt1.eof
Response.write tt1(0)
tt1.movenext
loop
bb.close
set bb=nothing
conn.close
set cOnn=nothing
%>
你前面的方法,我执行时到cmm.execute就报错。
我这样写的,但也是报错。 麻烦你按你的方法,帮我改造一下我的程序。
2452816419220861478613264759975638110080910268392593
ADODB.Recordset 错误 '800a0cb3'
当前提供程序不支持从单一执行返回多个记录集。
/test.asp,行 18