事务体会

本文介绍了在.NET Framework下使用SqlCommand进行数据库操作时如何正确处理事务,包括事务的开始、提交和回滚等操作,并通过示例代码说明了在事务中SqlCommand必须指定事务属性,以及事务回滚的具体含义。

1.事务在是依附在连接上的.
如果SqlCommand依附的连接上有事务,那么对必须给SqlCommand指定事务.不然出现异常:
异常详细信息: System.InvalidOperationException: 如果分配给命令的连接位于本地挂起事务中,ExecuteNonQuery 要求命令拥有事务。命令的 Transaction 属性尚未初始化。
代码:
 string connString = "Data Source=192.168.0.211;Initial Catalog=test1;User ID=dev_user;Password=dev_user";
            SqlConnection conn = new SqlConnection(connString);
            conn.Open();

            SqlTransaction transaction = conn.BeginTransaction(IsolationLevel.Serializable);

            SqlCommand sqlcomm = new SqlCommand();


            sqlcomm.Connection = conn;
            //sqlcomm.Transaction = transaction;
            sqlcomm.CommandText = "insert into yg(yg_name,b_id) values('b',1)";
            sqlcomm.ExecuteNonQuery();
            transaction.Rollback();
            conn.Close();

2.事务的Rollback()操作其实是使用了与sql相反的操作,如insert的Rollback为delete.
意思就是在Rollback之前,sql已真实地去数据库进行了操作.

3.事务是引用类型,其它过程对其的操作会影响它.
protected void Button1_Click(object sender, EventArgs e)
        {
            string connString = "Data Source=192.168.0.211;Initial Catalog=test1;User ID=dev_user;Password=dev_user";
            SqlConnection conn = new SqlConnection(connString);
            conn.Open();

            SqlTransaction transaction = conn.BeginTransaction(IsolationLevel.Serializable);

            SqlCommand sqlcomm = new SqlCommand();


            sqlcomm.Connection = conn;
            sqlcomm.Transaction = transaction;
            sqlcomm.CommandText = "insert into yg(yg_name,b_id) values('c',1)";
            sqlcomm.ExecuteNonQuery();
            //transaction.Rollback();
            myrollback(transaction);//事务是引用类型,其它过程对其的操作会影响它.
            conn.Close();
            Label1.Text = "ok";
        }

        void myrollback(SqlTransaction transaction)
        {
            transaction.Rollback();//insert无效
        }

作者:ikmb@163.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值