A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-杨鹏立 高级黑马   /  2013-3-2 17:23  /  1035 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-杨鹏立 于 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

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

2 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
本帖最后由 康晓璞 于 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();
                    }
                }
            }
        }

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马