黑马程序员技术交流社区

标题: 对表数据删除事务回滚 [打印本页]

作者: 黑马-杨鹏立    时间: 2013-3-2 17:23
标题: 对表数据删除事务回滚
本帖最后由 黑马-杨鹏立 于 2013-3-2 17:30 编辑

分享下对表数据删除事务回滚,在做两表删除的时候总担心删不完导致数据混乱,想到了事务回滚就把他写下来和大家一起分享。。。。希望得到大家帮助帮忙增加我的逻辑思维。。。。
        #region 对表数据删除事务回滚
        /// <summary>
        /// 对表数据删除事务回滚
        /// </summary>
        /// <param name="id">待传入表1,2的通用编号</param>
        /// <param name="tableName1">待传入表1</param>
        /// <param name="tableName2">待传入表2</param>
        /// <returns></returns>
        public bool DelRollBack(int id, string tableName1, string tableName2)
        {
            OpenDB();
            SqlTransaction sqlTran = Conn.BeginTransaction();//开始事务
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = Conn;//获取数据连接
            cmd.Transaction = sqlTran;//在执行sql语句时等待提交和rollback
            try
            {
                string sqlStr1 = "delete " + tableName1 + " where FTCPParentId=" + id + "";
                cmd.CommandText = sqlStr1;
                cmd.ExecuteNonQuery();
                string sqlStr2 = "delete " + tableName2 + " where FCaseChildId=" + id + "";
                cmd.CommandText = sqlStr2;
                cmd.ExecuteNonQuery();
                sqlTran.Commit();
                CloseDB();
                return true;
            }
            catch
            {
                sqlTran.Rollback();
                CloseDB();
                return false;
            }
        }
        #endregion

作者: 许庭洲    时间: 2013-3-2 18:59
值得学习ing!
作者: 康晓璞    时间: 2013-3-2 19:20
本帖最后由 康晓璞 于 2013-3-2 19:30 编辑

       public static void SqlNumTransExcute(ArrayList SQLArrayList)
        {
            using (SqlConnection Con = new SqlConnection(ConnString))//建立连接对象
            {
                SqlCommand Com = new SqlCommand();//实例化Command对象
                Com.Connection = Con;//Com对象连接到conn
                if (Con.State == ConnectionState.Closed)//打开数据库连接
                {
                    Con.Open();
                }
                SqlTransaction TranS = Con.BeginTransaction();//在执行sql语句时等待提交和rollback
                Com.Transaction = TranS;
                try
                {
                    for (int i = 0; i < SQLArrayList.Count; i++)//执行多条Sql语句
                    {
                        string StrSQL = SQLArrayList.ToString();
                        if (StrSQL.Length > 2)
                        {
                            Com.CommandText = StrSQL;
                            Com.ExecuteNonQuery();
                        }
                    }
                    TranS.Commit();//执行这个事务的操作
                }
                catch
                {
                    TranS.Rollback();//如果失败,执行事务的回滚
                    throw new Exception("操作失败,数据已回滚!");
                }
                finally
                {
                    if (Con.State == ConnectionState.Open)
                    {
                        Con.Close();
                    }
                }
            }
        }






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2