事务的回滚对于拥有自增主键的表来说,insert的数据是被删除,update和delete的数据是被恢复

8 篇文章 0 订阅
7 篇文章 0 订阅
事务的回滚对于拥有自增主键的表来说,insert的数据是被删除,update和delete的数据是被恢复

建表代码:
create table users(
	userid int primary key identity(1,1),
	uname varchar(100),
	utime datetime
)

c#调用代码


        private void selectInsertSelectUpdateSelectDeleteSelect()
        {
            SqlConnection conn = getConn();
            SqlTransaction tran = null;

            try
            {
                conn.Open();
                tran = conn.BeginTransaction();

                SqlDataAdapter cmdSelect = new SqlDataAdapter("select * from users", conn);
                cmdSelect.SelectCommand.Transaction = tran;
                DataTable dtSelect = new DataTable();

                SqlCommand cmdInsert = new SqlCommand("insert into users(uname, utime) values('cc', GETDATE())", conn);
                cmdInsert.Transaction = tran;

                SqlDataAdapter cmdSelect_1 = new SqlDataAdapter("select * from users", conn);
                cmdSelect_1.SelectCommand.Transaction = tran;
                DataTable dtSelect_1 = new DataTable();

                SqlCommand cmdUpdate = new SqlCommand("update users set utime=getdate()", conn);
                cmdUpdate.Transaction = tran;

                SqlDataAdapter cmdSelect_2 = new SqlDataAdapter("select * from users", conn);
                cmdSelect_2.SelectCommand.Transaction = tran;
                DataTable dtSelect_2 = new DataTable();

                SqlCommand cmdDelete = new SqlCommand("delete from users where userid=(select MAX(userid) from users)", conn);
                cmdDelete.Transaction = tran;

                SqlDataAdapter cmdSelect_3 = new SqlDataAdapter("select * from users", conn);
                cmdSelect_3.SelectCommand.Transaction = tran;
                DataTable dtSelect_3 = new DataTable();



                cmdSelect.Fill(dtSelect);
                bindData(dtSelect, gv);

                cmdInsert.ExecuteNonQuery();

                cmdSelect_1.Fill(dtSelect_1);
                bindData(dtSelect_1, gv1);

                cmdUpdate.ExecuteNonQuery();

                cmdSelect_2.Fill(dtSelect_2);
                bindData(dtSelect_2, gv2);

                cmdDelete.ExecuteNonQuery();

                cmdSelect_3.Fill(dtSelect_3);
                bindData(dtSelect_3, gv3);


                /*
                 * 此处丢异常,然后回滚
                */
                int x = 1;
                int y = 0;
                int z = x / y;

                tran.Commit();
            }
            catch (Exception ex)
            {
                tran.Rollback();

                Response.Write("fuck  有异常,老子回滚了");
            }
            finally
            {
                conn.Close();
            }
        }

        private void bindData(DataTable dt, GridView gv)
        {
            gv.DataSource = dt;
            gv.DataBind();
        }

        private SqlConnection getConn()
        {
            string connStr = "server=.;uid=sa;pwd=123456;database=test;";

            return new SqlConnection(connStr);
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值