文章出處

說明:很多時候,在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

 

 

 

 

 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()