zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Ecshop支持用户名、邮箱或手机号码登录
    Ecshop模板在首页调用指定分类的热销、推荐、新品商品
    使用JQuery的全屏背景图片,自动适应各种屏幕和浏览器
    浏览器左下角提示网页上有错误解决方法
    设为首页、加入收藏
    Flash遮住Div的解决办法
    谷歌站内搜索的两种方式
    网页内插入百度、谷歌搜索引擎
    CSS透明滤镜
    Eclipse无Server或者Tomcat8.5解决办法
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/3495269.html
Copyright © 2011-2022 走看看