事务的3种使⽤⽅法
三种事务的⽅法:1.sql语句,在sqlServer中执⾏的事务。2.SqlTransaction,代码程序中执⾏事务。3.TransactionScope 类似SqlTransaction区别在这个常⽤于using中。
⼀。sql语句:Sql Server2005/2008提供了begin tran,commit tran和rollback tran三个语句来显⽰的使⽤事务。begin tran表⽰事务开
始,commit tran表⽰事务提交,rollback tran表⽰事务回滚。
begin try
begin tran
insert into dbo.TransTestTable values (1,'1');
update dbo.TransTestTable set[Name]='22'where[Id]=1;
--RAISERROR ('Error raised in TRY block.',16,1);
commit tran
end try
begin catch
rollback tran
end catch
代码中的begin try和begin catch是捕获异常时使⽤的,只在sql server2005/2008中⽀持,sql server 2000上不⽀持这个语句。在begin try 和end try之间的代码运⾏时如果发⽣异常,则程序会跳转到begin catch和end catch中执⾏相关的rollback tran回滚操作。在begin tran和commit tran之间就是⼀个事务,insert和update必须同时成功,否则就同时失败。RAISERROR 语句的意思是抛出⼀个异常,只在sql server2005/2008中⽀持,sql server 2000上不⽀持这个语句。
执⾏上⾯的代码,我们会发现,插⼊和更新同时都成功了。把RAISERROR的注释去掉后,再执⾏,我们会发现,插⼊和更新都回滚了。因为RAISERROR抛出异常后,没有执⾏到commit tran,⽽是直接执⾏begin catch⾥⾯的rollback tran回滚语句了。
⼆、SqlTransaction⽤法:SqlTransaction是System.Data.SqlClient命名空间下的⼀个事务类,主要⽅法有Commit()和Rollback()两个函数。
static void Main(string[] args)
{
SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
SqlTransaction sqlTrans = null;
sqltransaction什么意思try
{
sqlConn.Open();
sqlTrans = sqlConn.BeginTransaction();//事务开始
SqlCommand sqlComm = new SqlCommand("", sqlConn, sqlTrans);
sqlComm.CommandTimeout = 120;
sqlComm.CommandType = System.Data.CommandType.Text;
string insertSql = "insert into dbo.TransTestTable values (66,'66');";
string updateSql = "update dbo.TransTestTable set [Name] = '77' where [Id] = 66;";
sqlComm.CommandText = insertSql;
sqlComm.ExecuteNonQuery();//执⾏insert
sqlComm.CommandText = updateSql;
sqlComm.ExecuteNonQuery();//执⾏update
//throw new Exception("test exception.the transaction must rollback");
sqlTrans.Commit();//事务提交
}
catch (Exception ex)
{
sqlTrans.Rollback();//事务回滚
Console.WriteLine(ex.Message);
}
finally
{
if (sqlConn.State != System.Data.ConnectionState.Closed)
sqlConn.Close();
}
Console.ReadLine();
}
上⾯的代码显⽰了SqlTransaction类的基本使⽤⽅法。⾸先使⽤SqlConnection建⽴连接后,sqlConn.BeginTransaction()表⽰事务的开始,在执⾏⼀些基本操作后(代码是执⾏⼀个insert和⼀个update)后,执⾏sqlTrans.Commit();表⽰事务提交,这时候,刚才insert和update的数据在数据库才能被使⽤。如果把throw new Exception("test exception.the transaction must rollback");这句的注释去掉,我们会发现,程序没有执⾏提交,⽽是直接执⾏了catch中的Rollback(),进⾏了回滚。那么刚才的insert和update⼀起被回滚。
三、TransactionScope⽤法:TransactionScope继承IDisposable接⼝,所以⼀般在using中使⽤。
static void Main(string[] args)
{
using (TransactionScope scope = new TransactionScope())
{
SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
sqlConn.Open();
string insertSql = "insert into [TransTestTable] values(11,'11')";
string updateSql = "update [TransTestTable] set [Name] = '111' where [Id] = 11"; SqlCommand sqlComm = new SqlCommand(insertSql, sqlConn);
sqlComm.CommandType = System.Data.CommandType.Text;
sqlComm.ExecuteNonQuery();
sqlComm = new SqlCommand(updateSql, sqlConn);
sqlComm.CommandType = System.Data.CommandType.Text;
sqlComm.ExecuteNonQuery();
sqlConn.Close();
scope.Complete();
}
Console.ReadLine();
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论