ADO.NET 快速入门(七):使用数据库事务

本文介绍了如何使用ADO.NET进行数据库事务处理,包括BeginTransaction、Commit和Rollback的基本用法,并提供了一个具体的示例,展示了如何通过SqlConnection和SqlCommand在“Region”表中插入两行记录并确保数据的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库事务用于控制数据提交到数据库。例如,在标准的账户程序,账户的借贷必须同时完成。由于电脑偶尔发生故障(电力中断、网络中断,等等),可能有些记录被更新或者添加,但是另外一些没有。为了避免这些情况,可以使用事务。ADO.NET 中的事务和 ADO 一样,是在数据库级别处理:即数据库必须支持事务。
 
针对事务有三个基本命令:BeginTransaction、Commit、和 Rollback。BeginTransaction 标识着事务的开始。任何发生在 BeginTransaction 和下个命令(要么 Rollback 要么 Commit)都被认为是事务的一部分。下面的示例代码显示了使用 SqlConnection 和 SqlCommand 插入2行记录到“Region”表。假如任何一个操作失败,变动会被回滚;如果都成功了,才会提交事务。
 
示例一:  
 
复制代码
            SqlConnection myConnection = new SqlConnection("server=(local);Integrated Security=SSPI;database=northwind");
            SqlCommand myCommand = new SqlCommand();
            SqlTransaction myTrans;

            // 打开连接
            myConnection.Open();
            // 指定连接属性
            myCommand.Connection = myConnection;
            // 开始事务
            myTrans = myConnection.BeginTransaction();
            // 为一个挂起的本地事务指定事务对象
            myCommand.Transaction = myTrans;

            try
            {
                myCommand.CommandText = "DELETE FROM Region WHERE (RegionID = 100) OR (RegionID = 101)";
                myCommand.ExecuteNonQuery();

                // 插入第一条记录
                myCommand.CommandText = "INSERT INTO Region (RegionID, RegionDescription) VALUES (100, 'MidWestern')";
                myCommand.ExecuteNonQuery();

                // 插入第二条记录
                myCommand.CommandText = "INSERT INTO Region (RegionID, RegionDescription) VALUES (101, 'MidEastern')";
                myCommand.ExecuteNonQuery();

                // 提交数据库事务
                myTrans.Commit();
                Console.WriteLine("两条记录写入数据库!");
            }
            catch (Exception e)
            {
                // 从挂起状态回滚事务
                myTrans.Rollback();
                Console.WriteLine(e.ToString());
                Console.WriteLine("没有记录写入数据库!");
            }
            finally
            {
                // 关闭连接
                myConnection.Close();
            }
复制代码

 

就像在传统的 ADO 一样,你可以通过 Connection 对象控制事务。实际上,当你使用 OleDbConnection 时,使用的是同样的 OLE DB 底层事务模型。因此,传统的 ADO 针对数据的事务提交,也能通过 ADO.NET 来提交。
 
DataSet 对象也拥有 Commit 模型(AcceptChanges、RejectChanges),但是不会影响数据库。Commit 模型只是单独针对 DataSet 中的缓存数据。从 DataSet 提交数据到数据库,使用 SqlDataAdpaterde 的Update 方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值