ADO.NET 快速入门(七):使用数据库事务
2017-04-26 21:55
615 查看
数据库事务用于控制数据提交到数据库。例如,在标准的账户程序,账户的借贷必须同时完成。由于电脑偶尔发生故障(电力中断、网络中断,等等),可能有些记录被更新或者添加,但是另外一些没有。为了避免这些情况,可以使用事务。ADO.NET 中的事务和 ADO 一样,是在数据库级别处理:即数据库必须支持事务。
针对事务有三个基本命令:BeginTransaction、Commit、和 Rollback。BeginTransaction 标识着事务的开始。任何发生在 BeginTransaction 和下个命令(要么 Rollback 要么 Commit)都被认为是事务的一部分。下面的示例代码显示了使用 SqlConnection 和 SqlCommand 插入2行记录到“Region”表。假如任何一个操作失败,变动会被回滚;如果都成功了,才会提交事务。
示例一:
就像在传统的 ADO 一样,你可以通过 Connection 对象控制事务。实际上,当你使用 OleDbConnection 时,使用的是同样的 OLE DB 底层事务模型。因此,传统的 ADO 针对数据的事务提交,也能通过 ADO.NET 来提交。
DataSet 对象也拥有 Commit 模型(AcceptChanges、RejectChanges),但是不会影响数据库。Commit 模型只是单独针对 DataSet 中的缓存数据。从 DataSet 提交数据到数据库,使用 SqlDataAdpaterde 的Update 方法。
针对事务有三个基本命令: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 快速入门(七):使用数据库事务
- ADO.NET 快速入门(九):使用关系型数据
- ADO.NET 快速入门(十三):使用 OLE DB 检索数据
- ADO.NET 快速入门(十三):使用 OLE DB 检索数据
- ADO.NET 快速入门(九):使用关系型数据
- ADO.NET 快速入门(十四):使用 SQL Server 检索数据
- ADO.NET 快速入门(十四):使用 SQL Server 检索数据
- [新手入门]快速学习 ADO.NET Entity Framework系列文章 #4 -- 数据新增、删除、修改(ObkectContext的 .SaveChange()方法)
- ADO.NET Entity Framework插入和更新数据(实体框架快速入门)
- ADO.NET 快速入门(二):执行命令
- ADO.NET 快速入门(十五):ADO 应用转换为 ADO.NET
- ADO.NET 快速入门(四):从数据库填充 DataSet
- ADO.NET 快速入门(五):从 DataSet 更新数据库
- ADO.NET Entity Framework创建 School 示例数据库(实体框架快速入门)
- NHibernate的基本使用、快速入门 - Microsoft.NET开发框架应用资源(zhuan)
- 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
- MOSS 2010:Visual Studio 2010开发体验(20)——使用ADO.NET Data Service快速访问SharePoint列表数据
- NDatabase 入门,简单使用 增删改查。让NDatabase带你脱离ADO.net,各种SQL 语句,各种DBMS,各种CRM,IOC之类的烦恼。我们也不需要仓库设计模式了,你妹的。不要表了,不要设计数据库字段了。就这样!
- Lucene.NET使用入门(一)【实现快速搜索】
- ADO.NET Entity Framework创建 Course Manager 应用程序(实体框架快速入门)