数据库事务用于控制数据提交到数据库。例如,在标准的账户程序,账户的借贷必须同时完成。由于电脑偶尔发生故障(电力中断、网络中断,等等),可能有些记录被更新或者添加,但是另外一些没有。为了避免这些情况,可以使用事务。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 方法。
 
原文链接:

ADO.NET 快速入门(七):使用数据库事务的更多相关文章

  1. ADO.NET 快速入门(五):从 DataSet 更新数据库

    该主题说明了如何使用 DataSet 在数据库中更新数据.你依然可以直接使用 SqlCommand 在数据库中插入.更新.和删除数据,记住这一点也很重要.理解“从数据库填充DataSet”涵盖的概念有 ...

  2. ADO.NET 快速入门(四):从数据库填充 DataSet

    从数据库获取数据很容易,处理数据更容易.如果想要从数据库获取只进.只读的数据流结果集,你可以使用 DataReader 执行命令并且检索它.关于如何使用 DataReader,请参考:使用 OLE D ...

  3. ADO.NET 快速入门(十五):ADO 应用转换为 ADO.NET

    这是一个已经移植到 .NET 的 ADO 应用的例子.也演示了单向.只读.快速 DataReader 的使用.它演示如何使用 DataView 类从 DataSet 获取一个 Table 和 操作一个 ...

  4. ADO.NET 快速入门(一):ADO.NET 概述

    ADO.NET 概述 ADO.NET是改进的ADO数据访问模型用于开发可扩展应用程序.他是专门为可伸缩性.无状态和XML核心的web而设计的.   ADO.NET使用一些ADO对象,如Connecti ...

  5. ADO.NET 快速入门(十四):使用 SQL Server 检索数据

    SqlDataReader 类提供了一种从数据源读取数据记录只进流的方法.如果想使用 OLE DB 接口的数据库或者 SQL Server7.0 之前的版本,请参考文章:使用 OLE DB 检索数据. ...

  6. ADO.NET 快速入门(六):读写 XML

    ADO.NET 和 DataSet 可以读写 XML Schema 和 XML.获取更多信息,请参考 How do I...Use XML and the DataSet?   DataSet 的 S ...

  7. ADO.NET 快速入门(二):执行命令

    Commands发出针对数据库的数据存储动作.例如,你可以执行一条命令插入或者删除数据.获取更多从数据库移动数据相关的信息,请参考“Update a Database from a DataSet”. ...

  8. springboot快速入门(五)——事务管理

    一.入门 概念就不再赘述了,由于一般我们是通过service控制事务,这里给出注解式的示例: package com.example.demo; import com.example.demo.bea ...

  9. Solr.NET快速入门(七)【覆盖默认映射器,NHibernate集成】

    覆盖默认映射器 默认情况下,SolrNet使用属性映射Solr字段. 但是,您可能需要使用另一个映射程序. 替换默认映射器取决于您如何设置库: 内置容器 如果使用默认的内置容器,可以在调用Startu ...

随机推荐

  1. Android中ListView嵌套进ScrollView时高度很小的解决方案

    package com.example.test.util; import android.view.View; import android.view.ViewGroup; import andro ...

  2. 一天一个Java基础——排序

    插入排序 直接插入排序: 当插入第i个数据元素k时,由前i-1个数据元素组成已排序的数据序列,将k与数据序列中各数据元素依次进行比较后,插入到数据序列的适当位置,使得插入后的数据序列仍是排序的. 直接 ...

  3. 【转】【玩转cocos2d-x之二十三】多线程和同步03-图片异步加载

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/15334159 cocos2d-x中和Android,Windows都 一样, ...

  4. JS调试必备的5个debug技巧

    我一直使用printf调试程序,一般来说都是比较顺利,但有时候,你会发现需要更好的方法.下面几个JavaScript技巧相信你一定会觉得十分有用   1. debugger; 我以前也说过,你可以在J ...

  5. Iwpriv工作流程及常用命令使用之二

    iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数 iwpriv是处理下面的wlan_private_args的所有扩展命令,iwpriv的实现上,是这样的, ...

  6. 【Python】python读取文件操作mysql

    尾大不掉,前阵子做检索测试时,总是因为需要业务端操作db和一些其他服务,这就使得检索测试对环境和数据依赖性特别高,极大提高了测试成本. Mock服务和mysql可以很好的解决这个问题,所以那阵子做了两 ...

  7. SDUT 3571 Password 暴力搜索

    这个题如果裸搜肯定超时了 但是我们可以枚举,用初始串的哪一位数字去填目标串的那一位数字 这样就是暴力6!,复杂度很低,然后需要解决过程中经过的点的问题, 因为是从左向右走,所以记录当前光标, 和当前达 ...

  8. 【LeetCode 208】Implement Trie (Prefix Tree)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  9. maltab几个常见的问题

    maltab常见的几个习题 1. MATLAB 的命令窗口的作用是什么?编辑/调试窗口?图象窗口? MATLAB命令窗口是MATLAB起动时第一个看到的窗口,用户可以在命令窗口提示符"> ...

  10. MYSQL里的索引类型介绍

    首先要明白索引(index)是在存储引擎(storage engine)层面实现的,而不是在server层面.不是所有的存储引擎支持有的索引类型. 1.B-TREE 最常见的索引类型,他的思想是所有的 ...