文章出處
文章列表
說明:很多時候,在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
文章列表
全站熱搜