使用SQL存储过程返回多结果集怎么处理

forcall 2007-01-25 04:52:39
存储过程里有若干个selec和返回参数:
@z_count int output,
@z_sum int output
AS
BEGIN
select @z_count=Count(*) from news_tab
select @z_sum=sum(click) from news_Tab
select classFir,count(*) from news_tab group by classFir
END

这样多样式的结果集前台怎么处理阿???
...全文
3829 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
facebookdotcom 2008-12-20
  • 打赏
  • 举报
回复
hb_gx 2007-01-25
  • 打赏
  • 举报
回复
需要注意一点如果是有DataReader接收那么返回值只有在你的连接关闭后才能得到,否则你只能得到结果集output参数是得不到的!

而用DataSet就比较方便,一个DataSet里面可以存N多DataTable你的每一个查询语句返回的结果集会分别存在不同的DataTable里面,用ds.Table[i]可以很方便的访问

如果得不到output的返回值,看看连接你的连接关闭没有!
loveeqing 2007-01-25
  • 打赏
  • 举报
回复
up
smile9961 2007-01-25
  • 打赏
  • 举报
回复
ALTER proc [dbo].[outputParms]
--〉
CREATE proc [dbo].[outputParms]
smile9961 2007-01-25
  • 打赏
  • 举报
回复
store procedure:
_________________________________________________
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[outputParms]
(
@count int output,
@sum int output
)
AS
BEGIN
declare @t table(id int identity(1,1), value int)

insert into @t
select 10 union all
select 20 union all
select 30

select @count = count(1), @sum = sum(value) from @t

select * from @t
END

.cs:
_________________________________________________
protected void Page_Load(object sender, EventArgs e)
{
SqlParameter[] parms = new SqlParameter[2];

parms[0] = new SqlParameter("@count",SqlDbType.Int);
parms[0].Direction=ParameterDirection.Output;

parms[1] = new SqlParameter("@sum", SqlDbType.Int);
parms[1].Direction = ParameterDirection.Output;

string strConn = @"server=EN0075\SQLEXPRESS; database=test; uid=reader; pwd=reader;";

DataTable dt = SqlHelper.ExecuteDataset(strConn, CommandType.StoredProcedure, "outputParms", parms).Tables[0];

Response.Write("parms[0].Value: " + parms[0].Value.ToString() + "<br>");
Response.Write("parms[1].Value: " + parms[1].Value.ToString() + "<br>");

for (int i = 0; i <dt.Rows.Count ; i++)
{
Response.Write("Rows " + Convert.ToInt16(i +1).ToString() + ":" + dt.Rows[i][1].ToString() + "<br>");
}
}
luqinghua 2007-01-25
  • 打赏
  • 举报
回复
有几条查询语句就有几个table
放到DataSet 里面取就行了
cat_hsfz 2007-01-25
  • 打赏
  • 举报
回复
这是返回多个DataTable吧,一个DataSet可以容纳多个DataTable的,你用DataSet去接收就是了。
Snowdust 2007-01-25
  • 打赏
  • 举报
回复
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter("存储过程名", "连接字符串");
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add("");//在此添加参数
DataSet ds = new DataSet();
da.Fill(ds);
underwater 2007-01-25
  • 打赏
  • 举报
回复
传入的输出参数.Value 就行了哇。
孟子E章 2007-01-25
  • 打赏
  • 举报
回复
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
GridView1.DataSource = dr;
GridView1.DataBind();

}

if (dr.NextResult())
{
GridView2.DataSource = dr;
GridView2.DataBind();
}
....
liushimen 2007-01-25
  • 打赏
  • 举报
回复
Red_angelX(上帝给了我一双美丽的双手,我却用他来手淫)
孟子E章 2007-01-25
  • 打赏
  • 举报
回复
DataReader.NextResult()

DataReader.NextResult()
北京的雾霾天 2007-01-25
  • 打赏
  • 举报
回复
你把你的Sql改一下:

@z_count int output,
@z_sum int output
AS
BEGIN
set @z_count=Count(*) from news_tab
set @z_sum=sum(click) from news_Tab
select classFir,count(*) from news_tab group by classFir
END

-----------------------
细看了一下你的存储过程,觉得你最好看上面的改一下,这样就只会返回最后个的select结果了,而上面的两个就用output输出了.
Glen_qiu 2007-01-25
  • 打赏
  • 举报
回复
dataset 和OUTPUT 一起用.
lizhizhe2000 2007-01-25
  • 打赏
  • 举报
回复
用DataSet接收
北京的雾霾天 2007-01-25
  • 打赏
  • 举报
回复
如果在返回的结果里只是返回了一个值的话,觉得最好用一个Output类型的参数来输出.这样觉得合适些.
北京的雾霾天 2007-01-25
  • 打赏
  • 举报
回复
如果有多个结果集返回,那么客户端一定要用一个DataSet来接收才行,这样可以通过DataSet的.Tables来分别访问它返回的数据集了.
Red_angelX 2007-01-25
  • 打赏
  • 举报
回复
把结果fill到一个DataTable里面
在根据需要取DataTable取

62,067

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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