调用存储过程输出参数的问题

juny_1 2007-08-24 07:42:44
最近在学分页存储过程,在调用的时候出现这样的问题:未将对象引用设置到对象的实例。搞了很久都没搞清楚,所以请大家帮帮忙
下面是代码:
protected void Button1_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("MaxTest", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@PageNum", SqlDbType.Int);
cmd.Parameters.Add("@PageSize", SqlDbType.Int);
cmd.Parameters.Add("@countPage", SqlDbType.Int);
cmd.Parameters["@PageSize"].Value = txtPageSize.Text;
cmd.Parameters["@PageNum"].Value = txtPageNum.Text;
cmd.Parameters["@countPage"].Direction = ParameterDirection.Output;
con.Open();
GridView1.DataSource = cmd.ExecuteReader();
lbltotal.Text=cmd.Parameters["@countPage"].Value.ToString();
GridView1.DataBind();
con.Close();
}
如果注释这句lbltotal.Text=cmd.Parameters["@countPage"].Value.ToString();
就没问题
这里存储过程
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER proc [dbo].[MaxTest]
@PageNum int=10,
@PageSize int=0,
@countPage int output
as
declare @strSql nvarchar(1000)
declare @strto nvarchar(200)
set @strto='select @countPage=count(*) from testTable'
exec sp_executesql @strto,N'@countPage int out',@countPage out
set @strSql='select top '+cast(@PageNum as varchar(20))+ ' * from testTable where
(id>(select MAx(id) from (select top '+cast(@PageNum*@PageSize as varchar(20))+' id from TestTable order by
id) as t))'
exec sp_executesql @strSql
...全文
123 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
juny_1 2007-08-24
  • 打赏
  • 举报
回复
可以了,谢谢
ccp5780199 2007-08-24
  • 打赏
  • 举报
回复
对于 ExecuteReader 比较特殊, 你需要再关闭 DatarReader 获取调用 NextResult 之后才能获取输出参数

IDataReader dr = comm.ExecuteReader();
dr.Close(); // !!!!!!!!!!
// OR dr.NextResult();
lbltotal.Text=cmd.Parameters["@countPage"].Value.ToString();

62,041

社区成员

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

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

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

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