蓝狐的技术思考 BlueFox Thinking in Tech...
交流,分享,探讨技术...... Communication, Sharing, and Discussion about Technology.....

导航

 

1.在Sql Server数据库存储过程中
Create proc RegisterUser
(@usrName varchar(30), @usrPasswd varchar(30),@age int, @PhoneNum varchar(20), @Address varchar(50) )
as
begin
//显示定义并开始一个事务
begin tran  
insert into USER(userName,userPasswd) values(@usrName,@usrPasswd)
if @@error<>0
begin
//操作失败,则事务回滚
rollback tran  
//返回存储过程,并设置返回码为事务操作失败
return -1  
end
insert into USERDOC(userName,age,sex,PhoneNumber,Address)  
values(@Usrname,@age,@PhoneNum,@Address)
if @@error<>0
begin
//操作失败,则事务回滚
rollback tran  
return -1
end
//如果操作执行正确,则提交事务
commit tran  
return 0
end

2.在C#代码中利用Connection对象的BeginTransaction方法创建事务
            try
            {
                SqlConnection con = new SqlConnection();
                SqlTransaction tran = con.BeginTransaction();
                string cmdText1 = "delete ...";
                SqlCommand cmd1 = new SqlCommand(cmd,con);
                cmd1.ExecuteNonQuery();
                string cmdText = "insert ...";
                SqlCommand cmd2 = new SqlCommand(cmd2, con);
                cmd2.ExecuteNonQuery();
                tran.Commit();
            }
            catch (Exception ex)
            {
                tran.Rollback();
                throw ex;
            }
3.在企业库中利用Database对象的ExcuteNonQuery方法的Transaction对象参数
  //使用事务增加两个表的数据
            using (DbConnection dbCon = db.CreateConnection())
            {
                dbCon.Open();
                DbTransaction dbTran = dbCon.BeginTransaction();
                try
                {
                   
                    //先增加会议
                    db.ExecuteNonQuery(dbTran,"AddMeeting", -1, Subject,Sponsor,MeetingRoom,Date,StartTime,EndTime,
                                     Manager,Actor,Agenda,IsApproved,IsPublished);

                    string[] attValue = strAtt.Split(';');
                    int rowsCount=0;
                    for (int i = 0; i < attValue.Length; i++)
                    {
                        //构造附件数据
                        string[] att = attValue[i].Split(',');
                        string FileName = att[0];
                        string FileExt = att[1];
                        string FilePath = att[2].Replace("/", "\\");
                        string Note = att[3];
                        //附加用途1表示会议资料类型
                        int Usage = 1;
                        long FileSize = Convert.ToInt64(att[4]);
                        DateTime UpTime = Convert.ToDateTime(att[5]);
                        //在增加附件
                        rowsCount = db.ExecuteNonQuery(dbTran, "AddAttachment", -1, RecID, FileName, FileExt, FilePath, Note, Usage, FileSize, UpTime);
                    }
                    dbTran.Commit();
                }
                catch (Exception ex)
                {
                    dbTran.Rollback();
                }
               finally
                {
                    dbCon.Close();
                }

 

posted on 2007-01-03 18:53  蓝狐  阅读(279)  评论(0编辑  收藏  举报