ASP.NET 加入返回参数ReturnValue

说明:很多时候,在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
原文地址:https://www.cnblogs.com/KeenLeung/p/3495269.html