接收不到存储过程输出参数?

dayang816 2010-09-27 09:39:14
存储过程如下:

ALTER PROCEDURE [dbo].[gettracktype]
@pagecount int output,
@startIndex int,
@endIndex int

AS

select @pagecount=count(typeid) from tracktype

exec('SELECT * FROM (select *,ROW_NUMBER() OVER (ORDER BY typeid desc) AS rn
from tracktype)
AS c WHERE rn>='+@startIndex+' and rn<='+@endIndex+' order by rn ')


数据层代码:

public static List<ShangWin_Model.Tracktype> gettracktype(int startIndex,int endIndex,out int pagecount)
{
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@pagecount",SqlDbType.Int),
new SqlParameter("@startIndex",startIndex),
new SqlParameter("@endIndex",endIndex)

};
paras[0].Direction = ParameterDirection.Output;

List<ShangWin_Model.Tracktype> list = new List<ShangWin_Model.Tracktype>();
using (SqlDataReader dr = DBUtility_ShangWin.DbHelperSQL.ExecuteReader(CommandType.StoredProcedure, "gettracktype",paras))
{
while (dr.Read())
{
ShangWin_Model.Tracktype tt = new ShangWin_Model.Tracktype();
tt.Typeid = (dr["Typeid"] == DBNull.Value) ? 0 : Convert.ToInt32(dr["Typeid"]);
tt.Typename = dr["typename"].ToString();
tt.Addtime = (dr["addtime"] == DBNull.Value) ? Convert.ToDateTime("1900-01-01") : Convert.ToDateTime(dr["addtime"]);
tt.Remark = dr["remark"].ToString();
list.Add(tt);
}
pagecount = Convert.ToInt32(paras[0].Value);
}


return list;

}



pagecount 变量总是0,但在SQL SERVER里面执行存储过程序可以得到值,

...全文
182 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamabel 2011-07-30
  • 打赏
  • 举报
回复
到底怎么解决啊,我也遇到了类似的情况
zm81499259 2010-09-27
  • 打赏
  • 举报
回复
没有指定那个总数的输出方向
guozhaoyou1 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dayang816 的回复:]
引用 4 楼 guozhaoyou1 的回复:
new SqlParameter("@pagecount",SqlDbType.Int),
你赋的初始值就是 int 就是0

pagecount = Convert.ToInt32(paras[0].Value);
取值又跑到参数里面去取... 不是0 是什么



怎么改?
[/Quote]


肯定不是在这个方法里面取值啊,
传递个ref int count过去
然后在DBUtility_ShangWin.DbHelperSQL.ExecuteReader方法里边接收
给count赋值 com.paraments["count"].value
dengNeeo 2010-09-27
  • 打赏
  • 举报
回复
在程序里面要指明这个参数的 方向 是输出的哦 你要修改成输出的哦
到网上找个例子把
不要急呀
这用的熟悉了就好了
漫漫来
还是可以整理好的
dayang816 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 guozhaoyou1 的回复:]
new SqlParameter("@pagecount",SqlDbType.Int),
你赋的初始值就是 int 就是0

pagecount = Convert.ToInt32(paras[0].Value);
取值又跑到参数里面去取... 不是0 是什么
[/Quote]


怎么改?
guozhaoyou1 2010-09-27
  • 打赏
  • 举报
回复
new SqlParameter("@pagecount",SqlDbType.Int),
你赋的初始值就是 int 就是0

pagecount = Convert.ToInt32(paras[0].Value);
取值又跑到参数里面去取... 不是0 是什么
明缘 2010-09-27
  • 打赏
  • 举报
回复
赫赫,我遇到过你的问题。
修改一下 输出参数(Return 参数)顺序。不是放在最前 就是最后。
应该就OK了。
dayang816 2010-09-27
  • 打赏
  • 举报
回复
跟综了呀,找不到原因才问
MSDNXGH 2010-09-27
  • 打赏
  • 举报
回复
下断点,跟综一下啊。。。为什么老问。。。。
Rock870210 2010-09-27
  • 打赏
  • 举报
回复
public static List<ShangWin_Model.Tracktype> gettracktype(int startIndex,int endIndex,ref int pagecount)
guozhaoyou1 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 hyd85716 的回复:]
你这个存储过程的调用对吗

declare @s as int
exec gettracktype @s output,'11','21'
select @s

这样才能返回output
[/Quote]

你错了 楼主的已经返回了值
hyd85716 2010-09-27
  • 打赏
  • 举报
回复
你这个存储过程的调用对吗

declare @s as int
exec gettracktype @s output,'11','21'
select @s

这样才能返回output
鸭梨山大帝 2010-09-27
  • 打赏
  • 举报
回复
没看SQL代码?

"select @pagecount=count(typeid) from tracktype"

[Quote=引用 4 楼 guozhaoyou1 的回复:]
new SqlParameter("@pagecount",SqlDbType.Int),
你赋的初始值就是 int 就是0

pagecount = Convert.ToInt32(paras[0].Value);
取值又跑到参数里面去取... 不是0 是什么
[/Quote]


为什么要把两个压根没有一点关系的动作整合到一个SP中去呢?

select @pagecount=count(typeid) from tracktype


exec('SELECT * FROM (select *,ROW_NUMBER() OVER (ORDER BY typeid desc) AS rn
from tracktype)
AS c WHERE rn>='+@startIndex+' and rn<='+@endIndex+' order by rn ')

无任何相关,虽然来源于同一个表.
bubiandefeng 2010-09-27
  • 打赏
  • 举报
回复
楼主可以看看DbHelperSQL.ExecuteReader这个方法有没有cmd.Parameters.Clear();
种草德鲁伊 2010-09-27
  • 打赏
  • 举报
回复
要先关闭连接,才能取到返回值。
ZXY900213 2010-09-27
  • 打赏
  • 举报
回复
一定要把DataReader关闭或释放了才能取到输出参数。
using (SqlDataReader dr = DBUtility_ShangWin.DbHelperSQL.ExecuteReader(CommandType.StoredProcedure, "gettracktype",paras))    
{
while (dr.Read())
{
ShangWin_Model.Tracktype tt = new ShangWin_Model.Tracktype();
tt.Typeid = (dr["Typeid"] == DBNull.Value) ? 0 : Convert.ToInt32(dr["Typeid"]);
tt.Typename = dr["typename"].ToString();
tt.Addtime = (dr["addtime"] == DBNull.Value) ? Convert.ToDateTime("1900-01-01") : Convert.ToDateTime(dr["addtime"]);
tt.Remark = dr["remark"].ToString();
list.Add(tt);
}
}
pagecount = Convert.ToInt32(paras[0].Value);

把pagecount = Convert.ToInt32(paras[0].Value);放到using语句以外...

62,046

社区成员

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

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

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

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