------------------------------------------------2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!----------------------------------------------------
1.代码中的事务
现在代码中基本使用存储过程来控制事务的处理,通过代码进行控制事务也是我们学习ADO.NET的任务之一!
事务是在连接对象之后创建,并把它跟命令对象进行关联,使用try.....Catch捕获异常,然后调用RollBack方法回滚事务!
Commit:提交
RollBack:回滚
///<summary>
///使用事务
///</summary>
publicvoid TransactionConn()
{
try
{
SqlConnectionStringBuilderconnBuilder =newSqlConnectionStringBuilder();
connBuilder.DataSource =@"PC2011052108IXK\SQLEXPRESS";
connBuilder.InitialCatalog ="Northwind";
connBuilder.IntegratedSecurity=true;
using (SqlConnection conn =newSqlConnection(connBuilder.ConnectionString))
{
conn.Open();
Console.WriteLine("打开成功");
SqlCommand cmd = conn.CreateCommand();
//定义事务
SqlTransaction trans;
//开始事务,创建事务对象,不可以实例化事务对象
trans = conn.BeginTransaction("MyTransaction"); //通过连接对象创建事务对象
//把事务对象给执行命令对象
cmd.Transaction =trans; //把事务跟命令对象进行关联
//通过异常来发现错误,以至让事务回滚
try
{
//这个是正确
cmd.CommandText ="INSERT INTO dbo.CustomerDemographics VALUES('B','这是一个不错的东西')";
cmd.ExecuteNonQuery();
//由于主键约束,这是错的
cmd.CommandText ="INSERT INTO dbo.CustomerDemographics VALUES('A','这是一个不错的东西')";
cmd.ExecuteNonQuery();
Console.WriteLine("插入成功");
//提交事务
trans.Commit(); //这一步很重要
}
catch (SqlException ex)
{
//失败了就进行回滚
Console.WriteLine("Error: {0}", ex.Message);
//回滚
trans.Rollback(); //事务的重要特性
Console.WriteLine("回滚成功");
}
}
}
catch (SqlException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
}
}
2.事务中的命名存储点
一旦你定义了命名存储点,只能回滚命名存储点之后的操作,这是要是情况而使用!
这种情况是当你调用RollBack方法并重载一个命名存储点的参数,如下代码所示:
using (SqlConnection conn =new SqlConnection(str))
{
conn.Open();
SqlTransaction transaction = conn.BeginTransaction();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText ="";
cmd.Transaction = transaction;
//使用命名存储点
transaction.Save("this is point"); //定义命名存储点,使用Save方法先保存存储点,定义回滚数据的开始位置
//这边是你要回滚的操作代码,TO DO...
//把从命名存储点到这里的操作进行回滚
transaction.Rollback("this ispoint"); //回滚命名存储点
}
3.SQL语句中的事务(SQL Server中的事务其实很复杂的)
BEGINTRANSACTION
--你需要执行的更新,删除,插入的语句
IF(@@ERROR>0) //这是系统变量,存储你在执行更新,删除,插入操作时发生错误的记录编号
ROLLBACK
ELSE
COMMIT
4.说说“TransactionScope”,让事务更加的简单
using(TransactionScope transactionScope= new TransactionScope())
{
try
{
using (SqlConnection connection= newSqlConnection())
{
//TO DO
//提交事务,如果有异常,他会自动回滚的
transactionScope.Complete();
}
}
catch (Exception)
{
//捕获异常
throw;
}
}
--------------------------------------------------- 2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------