存储过程返回值 没取到~ 求助!

guohouchang 2009-08-25 02:52:20

CREATE PROCEDURE sp_DispNewPictrueList
@Count int = 0 output
AS
EXEC( 'SELECT TOP 5 p.[id],u.userName as 作者,[Title] AS 作品,[imgUrl] AS url
,[vote] AS 票数,[hit] AS 浏览 FROM [PictrueVote].[dbo].[Pictrue] AS p INNER JOIN Users as u ON p.uid = u.id
Where p.[state] = ''true'' order by p.postTime Desc');
SELECT @Count =COUNT(1) from [PictrueVote].[dbo].[Pictrue]
GO



string proc = "sp_DispNewPictrueList";
List<Pictrue> list = new List<Pictrue>();
count = 0;
using (SqlConnection conn = new SqlConnection(DbHelperSQL.connectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = proc;
SqlParameter param = new SqlParameter("@Count", SqlDbType.Int, 0, ParameterDirection.Output, true, 0, 0, string.Empty, DataRowVersion.Default, DBNull.Value);
cmd.Parameters.Add(param);
if (conn.State == ConnectionState.Closed)
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
count = (int)param.Value;
while (reader.Read())
{
Pictrue pic = new Pictrue
{
id = Convert.ToInt32(reader[0]),
UserName = Convert.ToString(reader[1]),
Title = Convert.ToString(reader[2]),
imgUrl = Convert.ToString(reader[3]),
vote = Convert.ToInt32(reader[4]),
hit = Convert.ToInt32(reader[5])
};
list.Add(pic);
}
}
return list;


以上为主要代码~
...全文
90 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
振乾 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ruanxiaping 的回复:]
SqlParameter param = new SqlParameter("@Count", SqlDbType.Int, 0, ParameterDirection.Output, true, 0, 0,string.Empty, DataRowVersion.Default, DBNull.Value);

参数过长!!!!有很多可疑点:
1:第四个参数0,代表参数的长度,为0 的话,返回的是什么?记录的总数的长度应该大于等于1位数的,指定为4试一下
2:最后一个参数:DBNull.Value 是不是已经指定了值为空啊?,所以你才出现空引用异常?
建议:
  SqlParameter param = new SqlParameter("@Count", SqlDbType.Int, 4);
                param.Direction = ParameterDirection.Output;
[/Quote]

平哥,的讲解 很深入,ding ………………~!~!~!
yh7272hy 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ruanxiaping 的回复:]
SqlParameter param = new SqlParameter("@Count", SqlDbType.Int, 0, ParameterDirection.Output, true, 0, 0,string.Empty, DataRowVersion.Default, DBNull.Value);

参数过长!!!!有很多可疑点:
1:第四个参数0,代表参数的长度,为0 的话,返回的是什么?记录的总数的长度应该大于等于1位数的,指定为4试一下
2:最后一个参数:DBNull.Value 是不是已经指定了值为空啊?,所以你才出现空引用异常?
建议:
  SqlParameter param = new SqlParameter("@Count", SqlDbType.Int, 4);
                param.Direction = ParameterDirection.Output;
[/Quote]
ruanxiaping 2009-08-26
  • 打赏
  • 举报
回复
SqlParameter param = new SqlParameter("@Count", SqlDbType.Int, 0, ParameterDirection.Output, true, 0, 0,string.Empty, DataRowVersion.Default, DBNull.Value);

参数过长!!!!有很多可疑点:
1:第四个参数0,代表参数的长度,为0 的话,返回的是什么?记录的总数的长度应该大于等于1位数的,指定为4试一下
2:最后一个参数:DBNull.Value 是不是已经指定了值为空啊?,所以你才出现空引用异常?
建议:
SqlParameter param = new SqlParameter("@Count", SqlDbType.Int, 4);
param.Direction = ParameterDirection.Output;
振乾 2009-08-26
  • 打赏
  • 举报
回复


string proc = "sp_DispNewPictrueList";
List<Pictrue> list = new List<Pictrue>();
count = 0;
using (SqlConnection conn = new SqlConnection(DbHelperSQL.connectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = proc;
SqlParameter param = new SqlParameter("@Count", SqlDbType.Int, 0, ParameterDirection.Output, true, 0, 0, string.Empty, DataRowVersion.Default, DBNull.Value);
cmd.Parameters.Add(param);
if (conn.State == ConnectionState.Closed)
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
count = (int)param.Value;
while (reader.Read())
{
Pictrue pic = new Pictrue
{
id = Convert.ToInt32(reader[0]),
UserName = Convert.ToString(reader[1]),
Title = Convert.ToString(reader[2]),
imgUrl = Convert.ToString(reader[3]),
vote = Convert.ToInt32(reader[4]),
hit = Convert.ToInt32(reader[5])
};
list.Add(pic);
}
}
return list;


昌哥,你这里是不是应该把 count = (int)param.Value;
放在 while 循环之后试试哈。


guohouchang 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sql77 的回复:]
引用 4 楼 fuda_1985 的回复:
SELECT @Count =COUNT(1) from  [PictrueVote].[dbo].[Pictrue]
你这样写是取不到值的,在sql中select还有个作用是赋值。
你要再加上一句
select @Count才行。

就是这样了,要查询出来才显示的,
[/Quote]

这样的话 查出的记录不是2张表吗。我就是想把这个@Count 作为一个输出参数返回~ 然后在后台代码中取得这个值。。其他的内容通过SqlDataReader读取
tommy326 2009-08-26
  • 打赏
  • 举报
回复
SELECT @Count =COUNT(1) from [PictrueVote].[dbo].[Pictrue]
这句话是对@Count赋值

你应该加个输出@Count的语句
select @Count
mengxj85 2009-08-26
  • 打赏
  • 举报
回复
CREATE PROCEDURE sp_DispNewPictrueList
@Count int = 0 output
AS
EXEC( 'SELECT TOP 5 p.[id],u.userName as 作者,[Title] AS 作品,[imgUrl] AS url
,[vote] AS 票数,[hit] AS 浏览 FROM [PictrueVote].[dbo].[Pictrue] AS p INNER JOIN Users as u ON p.uid = u.id
Where p.[state] = ''true'' order by p.postTime Desc');
SELECT @Count =COUNT(1) from [PictrueVote].[dbo].[Pictrue]
--
select @Count
---OR
print @count
GO

hrbwgs1111 2009-08-25
  • 打赏
  • 举报
回复
slund 2009-08-25
  • 打赏
  • 举报
回复
存储过程执行成功否?
SQL77 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fuda_1985 的回复:]
SELECT @Count =COUNT(1) from  [PictrueVote].[dbo].[Pictrue]
你这样写是取不到值的,在sql中select还有个作用是赋值。
你要再加上一句
select @Count才行。
[/Quote]
就是这样了,要查询出来才显示的,
fuda_1985 2009-08-25
  • 打赏
  • 举报
回复
SELECT @Count =COUNT(1) from [PictrueVote].[dbo].[Pictrue]
你这样写是取不到值的,在sql中select还有个作用是赋值。
你要再加上一句
select @Count才行。
SQL77 2009-08-25
  • 打赏
  • 举报
回复
CREATE PROCEDURE sp_DispNewPictrueList
@Count int = 0 output
AS
EXEC( 'SELECT TOP 5 p.[id],u.userName as 作者,[Title] AS 作品,[imgUrl] AS url
,[vote] AS 票数,[hit] AS 浏览 FROM [PictrueVote].[dbo].[Pictrue] AS p INNER JOIN Users as u ON p.uid = u.id
Where p.[state] = ''true'' order by p.postTime Desc');
SELECT @Count =COUNT(1) from [PictrueVote].[dbo].[Pictrue]
GO

楼主这是什么意思????

那第一句动态执行,与第二句没关系吧!!!!
guohouchang 2009-08-25
  • 打赏
  • 举报
回复
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
guohouchang 2009-08-25
  • 打赏
  • 举报
回复
ding~

62,046

社区成员

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

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

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

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