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


    数据库事务用于控制数据提交到数据库。例如,在标准的账户程序,账户的借贷必须同时完成。由于电脑偶尔发生故障(电力中断、网络中断,等等),可能有些记录被更新或者添加,但是另外一些没有。为了避免这些情况,可以使用事务。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 方法。
     
    原文链接:
  • 相关阅读:
    10465
    移动Web开发图片自适应两种常见情况解决方案
    [置顶] Spring的DI依赖实现分析
    Android中两种设置全屏或者无标题的方法
    Esper系列(十二)Variables and Constants
    Esper系列(十一)NamedWindow语法Merge、Queries、Indexing、Dropping
    Esper系列(十)NamedWindow语法delete、Select+Delete、Update
    Esper系列(九)NamedWindow语法create、Insert、select
    Esper系列(八)Method Definition、Schema
    Docker系列(五)OVS+Docker网络打通示例
  • 原文地址:https://www.cnblogs.com/JavCof/p/3435771.html
Copyright © 2020-2023  润新知