怎么获取存储过程的返回值?

Mousa_Zoo 2010-05-25 02:26:19

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SO_BLOG_UPDATE_USER]
@username varchar(50) =null,
@blogname varchar(50) =null,
@headimg varchar(50) =null,
@summary varchar(200) =null,
@blogtitle varchar(50) =null,
@address varchar(50) =null,
@birthday datetime=null,
@gender bit=1,
@keepsecret bit=0,
@return int output
as
set nocount on
begin
BEGIN TRANSACTION
update blog_user set blogname=@blogname,headimg=@headimg,summary=@summary,blogtitle=@blogtitle,address=@address,birthday=@birthday,gender=@gender,keepsecret=@keepsecret where username=@username
IF @@error=0
begin
COMMIT TRANSACTION
set @return = 1
end
ELSE
begin
ROLLBACK TRANSACTION
set @return = 0
end
return
end

这个要怎么获取返回的值啊?
我用这个不行 总是 0 但是语句又执行了

public int ExecuteNonQuerytoo(string connectionString, CommandType cmdType, string cmdText)
{
int result = -1;
SqlConnection conn = new SqlConnection(connectionString);
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = cmdType;
conn.Open();
SqlParameter spt = new SqlParameter("@return", SqlDbType.Int, 4);
spt.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(spt);
cmd.ExecuteNonQuery();
result = Convert.ToInt32(spt.Value);
conn.Close();
return result;
}
...全文
248 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
xk1126 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 t20100504t 的回复:]
begin tran ok --开始一个事务 OK
delete from rxqz where qz= 'rx015 ' --删除数据
save tran bcd --保存一个事务点 命名为 bcd
update sz set name='李丽s' where name= '李丽'--修改数据
if @@error=0 --判断修改数据有没有出错
begin --如果出错……
[/Quote]
正解!
bdx808 2010-05-25
  • 打赏
  • 举报
回复
谢谢,收藏了。
jianshao810 2010-05-25
  • 打赏
  • 举报
回复
9楼的可以。。帮顶,另外建议楼主到网上去看看c#操作ado.net的资料,毕竟还有很多要学
LittleLee 2010-05-25
  • 打赏
  • 举报
回复
关注
学习!
A_persons_journey 2010-05-25
  • 打赏
  • 举报
回复
神说回帖能拿分
wuyq11 2010-05-25
  • 打赏
  • 举报
回复
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcedure;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Direction = ParameterDirection.Output;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@b"].Value.ToString());
afeng124 2010-05-25
  • 打赏
  • 举报
回复
ALTER PROCEDURE [dbo].[SO_BLOG_UPDATE_USER]
@username varchar(50) =null,
@blogname varchar(50) =null,
@headimg varchar(50) =null,
@summary varchar(200) =null,
@blogtitle varchar(50) =null,
@address varchar(50) =null,
@birthday datetime=null,
@gender bit=1,
@keepsecret bit=0
as
set nocount on
begin
BEGIN TRANSACTION
update blog_user set blogname=@blogname,headimg=@headimg,summary=@summary,blogtitle=@blogtitle,address=@address,birthday=@birthday,gender=@gender,keepsecret=@keepsecret where username=@username
IF @@error=0
begin
COMMIT TRANSACTION
select 1 as ResultValue
end
ELSE
begin
ROLLBACK TRANSACTION
select 0 as ResultValue
end
return
end

直接像select语句一样取第一行第一列就好了。 @return 应该是sql server默认的还回值,不需要显式的声明为out put类型的参数的。

myhope88 2010-05-25
  • 打赏
  • 举报
回复
用事务去处理吧
froor 2010-05-25
  • 打赏
  • 举报
回复
conn.Open();//打开连接
SqlCommand cmd = new SqlCommand("SO_BLOG_UPDATE_USER", conn);
cmd.CommandType = CommandType.StoredProcedure;//指是是存储过程

//添加参数
cmd.Parameters.Add("@username", SqlDbType.VarChar, 50).Value ="";
cmd.Parameters.Add("@blogname", SqlDbType.VarChar, 50).Value ="";
cmd.Parameters.Add("@headimg", SqlDbType.VarChar, 50).Value ="";
cmd.Parameters.Add("@summary", SqlDbType.VarChar, 200).Value = "";
cmd.Parameters.Add("@blogtitle", SqlDbType.VarChar, 50).Value ="";
cmd.Parameters.Add("@address", SqlDbType.VarChar, 50).Value ="";
cmd.Parameters.Add("@birthday", SqlDbType.DateTime, 40).Value = "";
cmd.Parameters.Add("@gender", SqlDbType.Bit).Value = 1;
cmd.Parameters.Add("@keepsecret", SqlDbType.Bit).Value = 0;
cmd.Parameters.Add("@return", SqlDbType.Int, 4).Direction = ParameterDirection.Output;
这中间就是你要写的代码
conn.Close();//关闭连接
int sum = int.Parse(cmd.Parameters["@return"].Value.ToString());//获得存储过程返回值
andybang1981 2010-05-25
  • 打赏
  • 举报
回复
其它参数都没赋值啊,where username=@username,那肯定结果是0啦
z050301402 2010-05-25
  • 打赏
  • 举报
回复
代码都给你贴上了呀
waiwai1015 2010-05-25
  • 打赏
  • 举报
回复
帮你顶
小黑哥gs 2010-05-25
  • 打赏
  • 举报
回复
你QQ设了问题。。加不了你。。我QQ524542459
z050301402 2010-05-25
  • 打赏
  • 举报
回复
conn.Open();//打开连接
SqlCommand cmd = new SqlCommand("SO_BLOG_UPDATE_USER", conn);
cmd.CommandType = CommandType.StoredProcedure;//指是是存储过程

//添加参数
cmd.Parameters.Add("@username", SqlDbType.VarChar, 50).Value ="";
cmd.Parameters.Add("@blogname", SqlDbType.VarChar, 50).Value ="";
cmd.Parameters.Add("@headimg", SqlDbType.VarChar, 50).Value ="";
cmd.Parameters.Add("@summary", SqlDbType.VarChar, 200).Value = "";
cmd.Parameters.Add("@blogtitle", SqlDbType.VarChar, 50).Value ="";
cmd.Parameters.Add("@address", SqlDbType.VarChar, 50).Value ="";
cmd.Parameters.Add("@birthday", SqlDbType.DateTime, 40).Value = "";
cmd.Parameters.Add("@gender", SqlDbType.Bit).Value = 1;
cmd.Parameters.Add("@keepsecret", SqlDbType.Bit).Value = 0;
cmd.Parameters.Add("@return", SqlDbType.Int, 4).Direction = ParameterDirection.Output;
这中间就是你要写的代码
conn.Close();//关闭连接
int sum = int.Parse(cmd.Parameters["@return"].Value.ToString());//获得存储过程返回值
mngzilin 2010-05-25
  • 打赏
  • 举报
回复
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcedure;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 10;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@return"].Value.ToString());


参考:
http://www.cnblogs.com/souso/archive/2009/09/09/1563104.html
t20100504t 2010-05-25
  • 打赏
  • 举报
回复
begin tran ok --开始一个事务 OK
delete from rxqz where qz= 'rx015 ' --删除数据
save tran bcd --保存一个事务点 命名为 bcd
update sz set name='李丽s' where name= '李丽'--修改数据
if @@error=0 --判断修改数据有没有出错
begin --如果出错
rollback tran bcd -- 回滚事务到 BCD 的还原点
commit tran ok --提交事务
end
else --出错
commit tran ok --提交事务


@@error 是一个内置的全局变量,为0表示最近的一次操作没有错误.
你好像是用错了吧

t20100504t 2010-05-25
  • 打赏
  • 举报
回复
IF @@error=0
应该是
IF @@error==0
z050301402 2010-05-25
  • 打赏
  • 举报
回复
加QQ我给你说 50301402 要不加群6102686
小黑哥gs 2010-05-25
  • 打赏
  • 举报
回复
LZ消失了
dataadapters 2010-05-25
  • 打赏
  • 举报
回复
result=(int)cmd.ExecuteNonQuery();
加载更多回复(3)

110,547

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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