事务处理SqlTransaction

事务处理是包含一个或多个任务的一组关联操作的提交或回滚操作。在事务执行的过程中,保证事务具有基本的ACID属性(原子、一致性、隔离和持久性)。.NET Framework的事务管理支持多种事务处理方式,包括显性事务和隐性事务、本地事务和分布式事务、事务嵌套、事务升级等,同时包含了三种主要信任级别:AllowPartiallyTrustedCallers(APTCA)信任级别、DistributedTransactionPermission(DTP)信任级别和完全信任级别。要使用事务处理应在程序头部引用System.Data.SqlClient命名空间。

13.1  使用SqlTransaction实现数据库操作事务

SqlTransaction类是对SQL Server数据库进行事务处理的类,该类的实例由SqlConnection类实例的BeginTransaction方法创建,表示在该数据库连接实例上开始一个数据库事务,创建SqlTransaction类实例后,在程序中使用该实例的Commit方法提交事务,或者使用该类的Rollback方法回滚事务。

技术要点

本示例主要说明了如何在程序中使用SqlTransaction实现数据库操作事务,技术要点如下。
SqlTransaction类实例由SqlConnection类实例的BeginTransaction方法创建,表示将在该数据库连接实例上开始一个数据库操作事务。
数据库连接作为事务范围时,当事务范围结束数据库连接将会自动关闭。
创建操作数据库的SqlCommand类实例时,必须使用数据库连接和数据库事务来创建,该数据库命令实例才能在事务中登记,才能使该命令的执行纳入事务处理的范围内。

实现步骤

(1)创建控制台应用程序项目,命名为“DatabaseSqlTransaction”。

(2)打开并编辑Program.cs文件,代码如下所示。

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace DatabaseSqlTransaction
{
class Program
{
static void Main(string[] args)
{
//连接数据库的字符串
string ConnectionString = @"Data Source = localhost; 
Initial Catalog = Northwind; Integrated Security = SSPI;";
//使用数据库连接作为事务范围
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
conn.Open();//连接数据库
SqlTransaction transaction;
//开始一个本地事务
transaction = conn.BeginTransaction("MyTransaction");
//必须为SqlCommand指定数据库连接和登记的事务
SqlCommand cmd = new SqlCommand("", conn, transaction);
try
{
//向数据表中插入记录的命令语句
cmd.CommandText = @"Insert into Region (RegionID,
RegionDescription) 
VALUES (10, '自定义描述A')";
cmd.ExecuteNonQuery();
cmd.CommandText = @"Insert into Region (RegionID, 
RegionDescription) 
VALUES (11, '自定义描述B')";
cmd.ExecuteNonQuery();
transaction.Commit();//提交事务
Console.WriteLine("操作完成");
}
catch (Exception ex)
{
Console.WriteLine("提交错误类型: {0}", ex.GetType());
Console.WriteLine("提交错误信息: {0}", ex.Message);
try
{
transaction.Rollback();//回滚事务
}
catch (Exception ex2)
{
Console.WriteLine("回滚错误类型: {0}", ex2.GetType());
Console.WriteLine("回滚错误信息: {0}", ex2.Message);
}
}
}
Console.ReadLine();
}
}
}  
(3)按F5键运行程序,运行结果如下所示。
操作完成
(4)按下回车键结束程序运行,再次按下F5键运行程序,运行结果如下所示。
提交错误类型: System.Data.SqlClient.SqlException
提交错误信息: 违反了 PRIMARY KEY 约束 'PK_Region'。不能在对象 'Region' 中插入重
复键。
语句已终止。

源程序解读

(1)本示例程序创建一个SqlConnection类的实例,并将该实例作为事务范围,在该范围内使用SqlConnection类实例创建一个SqlTransaction类实例的本地事务,使用数据库连接类实例和数据库事务类实例,创建一个SqlCommand类的实例,并为该SqlCommand类实例指定数据库操作命令,执行该操作如果执行过程正常,则提交事务,否则,将数据库操作事务回滚。本示例程序的流程图如图13.1所示。

事物处理SqlTransaction - 幸福颜色 - 幸福颜色 
图13.1  使用SqlTransaction实现数
据库操作事务示例程序流程图

(2)在本示例中使用了信任连接字符串连接SQL Server数据库,在数据库连接包含的事务范围结束时会自动关闭数据库连接,不需要编写关闭数据库连接的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值