您的位置:首页 > 编程语言 > ASP

ASP.NET 加入返回参数ReturnValue

2013-12-28 13:32 288 查看
说明:很多时候,在DBHelper函数中,都能看到以下的代码:

cmd.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));


其起的作用是:当调用的存储过程中如果有Return @xxx 就会把这个值返回给这个ReturnValue 参数。这样你在代码里就可以调用这个值了。

例子:

数据库:

操作的表:tb_user



在数据库中添加一个一个存储过程:

create proc Test
@id int,@name varchar(20),@pwd varchar(20)
as
begin
declare @count int
insert into tb_login(id,name,pwd) values(@id,@name,@pwd)
select @count = (select count(*) from tb_login)
return @count
end
go


后台代码:

数据库操作

【Class】DataBase:

数据库库连接自己写了

/// <summary>
/// 执行命令
/// </summary>
/// <param name="procName">命令文本</param>
/// <param name="prams">参数对象</param>
/// <returns></returns>
public int RunProc(string procName, SqlParameter[] prams)
{
SqlCommand cmd = CreateCommand(procName, prams);
cmd.ExecuteNonQuery();
this.Close();
//得到成功执行的返回值
return (int)cmd.Parameters["ReturnValue"].Value;
}


/// <summary>
/// 创建一个SqlCommand对象以此来执行命令文本
/// </summary>
/// <param name="procName">命令文本</param>
/// <param name="prams"命令文本所需参数</param>
/// <returns>返回SqlCommand对象</returns>
private SqlCommand CreateCommand(string procName, SqlParameter[] prams)
{
this.Open();
SqlCommand cmd = new SqlCommand(procName, conn);
//cmd.CommandType = CommandType.Text;// 执行类型:命令文本
cmd.CommandType = CommandType.StoredProcedure; //执行类型:存储过程

//一次把参数传入命令文本
if (prams != null)
{
foreach (SqlParameter param in prams)
{
cmd.Parameters.Add(param);
}
}

//加入返回参数
cmd.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));

return cmd;
}


实体类:

Class User

public class User
{
private int id;
private string name;
private string pwd;

public string Pwd
{
get { return pwd; }
set { pwd = value; }
}

public string Name
{
get { return name; }
set { name = value; }
}

public int Id
{
get { return id; }
set { id = value; }
}
}


测试数据库类:

Class TestDataBase

public class TestDataBase
{
DataBase db = new DataBase();
public int AddUser(User newUser)
{
SqlParameter[] prams = {
db.MakeInParam("@id",SqlDbType.Int,100,newUser.Id),
db.MakeInParam("@name",SqlDbType.VarChar,20,newUser.Name),
db.MakeInParam("@pwd",SqlDbType.VarChar,20,newUser.Pwd)
};

return db.RunProc("Test", prams);
}

}


前台:

Test.aspx:

<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="label1" runat="server"></asp:Label>
</div>
</form>
</body>


Test.aspx.cs:

public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
User newUser = new User();
newUser.Id = 3;
newUser.Name = "kkK";
newUser.Pwd = "kkk";

TestDataBase tdb = new TestDataBase();
int num = tdb.AddUser(newUser);

label1.Text = num.ToString();
}
}
}


执行前,查看数据库:



执行后:



返回结果:



其他的例子:

摘自:http://bbs.csdn.net/topics/330002062

在更新数据表数据库时,可以通过返回值,确定更新是否成功。

通常的用法:

c# code:

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();


sql code:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐