asp.net事物【鸡蛋】

来源:互联网 发布:家庭网络共享文件 编辑:程序博客网 时间:2024/05/02 17:49
存储过程创建事物:--创建表CREATE TABLE [dbo].[TAccount]([PKID] [int] IDENTITY(1,1) NOT NULL,[AccountName] [nvarchar](50) NULL,[AccountMoney] [money] NULL)--插入数据INSERT INTO dbo.TAccount VALUES('小张',3000)INSERT INTO dbo.TAccount VALUES('小刘',8000)--例如:小刘转账1000给小张CREATE PROCEDURE PRO_Transfer@toID int,@fromID int,@moneys money,@return int outputASBEGINBEGIN TRAN  --开始事物Set xact_abort on --表示遇到错误立即回滚所有 off为只回滚到错误的地方  UPDATE dbo.TAccount SET [AccountMoney]=[AccountMoney]-@moneys WHERE [PKID]=@fromIDUPDATE dbo.TAccount SET [AccountMoney]=[AccountMoney]+@moneys WHERE [PKID]=@toIDif @@ERROR<>0 BEGINROLLBACK TRAN --如果有错误就执行回滚SET @return=1 --错误返回值ENDELSEBEGINCOMMIT TRAN   --语句执行成功,提交事务SET @return=2  --正确返回值ENDEND






2 ADO.net事务
   Ado.net事务可能是大家一般都用的
 优点:简单,效率和数据库事务差不多。
 缺点:事务不能跨数据库,只能在一个数据库连接上。如果是两个数据库上就不能使用该事务了。
Demo:


/// <summary>
        
/// 一般的ADO.net 事务
        /// </summary>
        public void ADONetTran1()
        {
            SqlConnection conn = 
new SqlConnection("Data Source=127.0.0.1;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=123;");
            SqlCommand cmd = 
new SqlCommand();
            
try
            {
                cmd.CommandText = "Update Region Set RegionDescription=@UpdateValue where RegionID=@UpdateID";
                cmd.CommandType = CommandType.Text;
                cmd.Connection = conn;
                conn.Open();
                SqlParameter[] paras = 
new SqlParameter[]{
                                        
new SqlParameter ("@UpdateID",SqlDbType.Int,32),
                                        
new SqlParameter ("@UpdateValue",SqlDbType .NChar,50)};
                paras[0].Value = "2";
                paras[1].Value = "Update Value12";

                
foreach (SqlParameter para in paras)
                {
                    cmd.Parameters.Add(para);
                }
                
//开始事务
                cmd.Transaction = conn.BeginTransaction();
                cmd.ExecuteNonQuery();


                cmd.CommandText = "insert into Region values(@InsertID,@InsertValue)";
                cmd.CommandType = CommandType.Text;

                paras = 
new SqlParameter[]{
                                        
new SqlParameter ("@InsertID",SqlDbType.Int ,32),
                                        
new SqlParameter ("@InsertValue",SqlDbType.NChar ,50)};
                paras[0].Value = "7";
                paras[1].Value = "Insert Value";

                cmd.Parameters.Clear();
                
foreach (SqlParameter para in paras)
                {
                    cmd.Parameters.Add(para);
                }
                
                cmd.ExecuteNonQuery();
                
//提交事务
                cmd.Transaction.Commit();
            }
            
catch
            {
                
//回滚事务
                cmd.Transaction.Rollback();
                
throw;
            }
            
finally
            {
                conn.Close();
            }

        }






原创粉丝点击