很多DBHelper函数里,添加返回参数ReturnValue 有什么用呢? 去掉也没事啊

napoleon1769 2009-12-24 02:35:09
很多DBHelper函数里,添加返回参数ReturnValue 有什么用呢

public SqlCommand CreateProCommand(string proname, SqlParameter[] param, int IsType)
{
Open();
SqlCommand cmd = new SqlCommand(proname, cn);
if (IsType == 1)
{
cmd.CommandType = CommandType.StoredProcedure;
}
else
{
cmd.CommandType = CommandType.Text;
}

if (param != null)
{
foreach (SqlParameter s in param)
{
cmd.Parameters.Add(s);
}
}
///添加返回参数ReturnValue
cmd.Parameters.Add(
new SqlParameter(RETURNVALUE, SqlDbType.Int, 4, ParameterDirection.ReturnValue,
false, 0, 0, string.Empty, DataRowVersion.Default, null));

///返回创建的SqlCommand对象
return cmd;


}


我把这2行去了也没事啊,不知道这个返回参数用来做什么, 成功返回1,失败返回0 ?? 不是吧
...全文
250 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南小鱼 2009-12-27
  • 打赏
  • 举报
回复
这实质上是调用带返回值的存储过程。比如在更新数据表数据库时,可以通过返回值,确定更新是否成功。
通常的用法:

SqlConnection conn = CreateSqlConnection();

SqlCommand cmd = new SqlCommand("sp_InsertInstitute", conn);

cmd.CommandType = CommandType.StoredProcedure;

SqlParameter[] parms = new SqlParameter[3]{

new SqlParameter("@InstituteNO","2"),

new SqlParameter("@InstituteName","计算机学院"),

new SqlParameter("@return",SqlDbType.Int)

};

foreach (SqlParameter parm in parms)

{

cmd.Parameters.Add(parm);

}

cmd.Parameters["@return"].Direction = ParameterDirection.ReturnValue;

try

{

cmd.ExecuteScalar();

}

catch (SqlException ex)

{

Console.WriteLine("操作失败!" + ex.Message);

return;

}

finally

{

conn.Close();

}

string strTmp = cmd.Parameters["@return"].Value.ToString();

switch (strTmp)

{

case "0":

Console.WriteLine("添加成功");

break;

case "1":

Console.WriteLine("数据有重复");

break;

case "2":

Console.WriteLine("数据操作失败");

break;

case "3":

Console.WriteLine("插入数据为空");

break;

}

Console.ReadKey();

CREATE PROCEDURE [dbo].[sp_InsertHotspot]

@hotTime int,

@hotContent xml

AS

BEGIN TRANSACTION

INSERT INTO t_Hotspot([iHotTime],[tHotContent]

) VALUES(@hotTime ,@hotContent )

IF @@ERROR <> 0

BEGIN

ROLLBACK TRANSACTION

RETURN 1--返回表示操作失败

END

ELSE

BEGIN

COMMIT TRANSACTION

RETURN 0--返回表示操作成功

END
napoleon1769 2009-12-27
  • 打赏
  • 举报
回复
还是不太明白, MSDN里的描述太机械化了。。 能不能说的简单形象店呢,这个返回参数是返回什么的...
满衣兄 2009-12-24
  • 打赏
  • 举报
回复
Input 此参数只用于将信息从应用程序传输到存储过程。
InputOutput 此参数可将信息从应用程序传输到存储过程,并将信息从存储过程传输回应用程序。
Output 此参数只用于将信息从存储过程传输回应用程序。
ReturnValue 此参数表示存储过程的返回值。SQL Server 的存储过程参数列表中不显示该参数。它只与存储过程的 RETURN 语句中的值相关联。


  存储过程为主键生成新值后,通常使用存储过程中的 RETURN 语句返回该值,因此用来访问该值的参数类型是 ReturnValue 参数。

  ReturnValue 参数与其他类型的参数有一个重要的区别。通常,在 ADO.NET 中为 Command 对象配置的参数的顺序并不重要。参数名称只用来与存储过程中相应的参数相匹配。但是,对于 ReturnValue 参数,它必须是列表中的第一个参数。

  也就是说,为 Command 对象配置 ReturnValue 参数时,必须首先在代码中配置该参数,这样它才能获取集合中的第一个数字索引。如果先配置任何其他参数,ReturnValue 参数将不能正常工作。

如:

create proc p(@a int)
as
if @a=1
return -4
else
return -1
这样就可以接收到return 的值了

111,098

社区成员

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

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

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