关于存储过程中输出参数和返回值

ZJM2032 2010-11-17 05:07:07
比如说有这样一个添加操作,
public int Add(jm.Model.Sms_SendQueue model)
{
int rowsAffected;
SqlParameter[] parameters = {
new SqlParameter("@smsid", SqlDbType.BigInt,8),
new SqlParameter("@Sender", SqlDbType.NVarChar,50),
new SqlParameter("@receiver", SqlDbType.NVarChar,50)};
parameters[0].Direction = ParameterDirection.Output;
parameters[1].Value = model.Sender;
parameters[2].Value = model.Receiver;
DbHelperSQL.RunProcedure("AddNewSMS", parameters, out rowsAffected);
return (int)parameters[0].Value;

public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
int result;
connection.Open();
SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
rowsAffected = command.ExecuteNonQuery(); //rowsAffected的结果是什么
result = (int)command.Parameters["ReturnValue"].Value;
//Connection.Close();
return result;
}
}

存储过程是这样的
begin
insert into dbo.Sms_SendQueue (Receiver,memo,flag,SmSType,NeedCardType,Remark1,WorkTime)
values (@Receiver,@memo,1,@SmSType,@NeedCardType,@Remark1,getdate())
return @@IDENTITY
end

然后我就搞糊涂了,到底执行这个存储过程中返回的是什么,是rowsAffected还是result还是smsid的值?
...全文
306 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrhero 2010-11-18
  • 打赏
  • 举报
回复
parameters[0].Direction = ParameterDirection.ReturnValue;

返回值和输出参数是两码事...@@IDENTITY是ReturnValue...

ps:你没有贴出存储过程声明部分无法知道有没有声明输出参数,另外参数数目似乎也不对...1楼纯忽悠...
ZJM2032 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 jianming2032 的回复:]
比如说有这样一个添加操作,
public int Add(jm.Model.Sms_SendQueue model)
{
int rowsAffected;
SqlParameter[] parameters = {
new SqlParameter("@smsid", SqlDbType.BigInt,8),
new SqlParameter("@Sender", SqlDbType……
[/Quote]

谢谢,
错误:形参 "@smsid" 未声明为 OUTPUT 参数,但传递进来的实参请求输出 是什么原因?
ZJM2032 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vrhero 的回复:]
parameters[0].Direction = ParameterDirection.ReturnValue;

返回值和输出参数是两码事...@@IDENTITY是ReturnValue...

ps:你没有贴出存储过程声明部分无法知道有没有声明输出参数,另外参数数目似乎也不对...1楼纯忽悠...
[/Quote]
哦,这样就是直接让第一个参数就等于存储过程返回值,那如果我想让第一参数作为输出参数,然后得到这个输出参数的值,那应该怎么做?
狼王_ 2010-11-17
  • 打赏
  • 举报
回复
rowsAffected的结果是什么?答:结果是执行T-SQL语句后影响的行数。
存储过程中的 @smsid 参数应该是output类型的。
你这个RunProcedure方法返回的结果应该是@smsid 这个参数的值。

111,129

社区成员

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

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

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