来自百度百科的解释是:
事务是访问并可能更新数据库中各种数据项的一个程序执行单元。
事物的特性
事务是恢复和并发控制的基本单元。
事务应该具有四个属性:原子性、一致性、隔离性、持久性。
原子性:一个事务是一个不可分割的工作单位,事务中包括的各项操作要么都做,要么都不做。
一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态。一致性和原子性是密切相关的。
隔离性:一个事务的执行不能被其他事务干扰,也就是说一个事务执行过程中所做的内部操作和使用的数据相对其他 并发的事务是隔离的,不能相互干扰。
持久性:一个事务一旦提交,它对数据库中数据的改变应该是永久性的,接下来的其他操作或者故障不应该对其有任何影响。
1、在sql server 数据库中使用事务
begin try
begin tran
begin
update t_card_accountset batchid=up_batchid,up_batchid=null where CARDID=@cardid
end
begin
delete from t_card_serv where cardid=@cardid
end
begin2/
update t_CARD_BATCHSET NCOUNT=@cardNum-1 WHERE BATCHID=@batchid
end
begin
INSERT T_SERV_DEDLOG(ID,CARDID,DEDTIMES,OPER,MEMO,OPTYPE,C_DATE) values (@maxID+1,@cardid,1,@batchid,'绑定卡的取消',1,getdate())
end
commit tran
set @out_code='0000';
end try
begin catch
rollback tran;
set @out_code='0002';
end catch
END
在try的过程中如果没有报错,出现catch,那么就执行成功,如果出现catch,就rollback tran回滚。
2、在C#代码中使用事务
public static int GetAffectedRecordTrans(string _connectionString,string sql, SqlParameter[] paras)
{
SqlConnection con = new SqlConnection(_connectionString);
try
{
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
cmd.Transaction = con.BeginTransaction();//定义事务
if (paras != null)
{
foreach (SqlParameter para in paras)
{
cmd.Parameters.Add(para);
}
}
try
{
int i = Convert.ToInt32(cmd.ExecuteNonQuery().ToString());
cmd.Transaction.Commit();//执行完成,事务提交
return i;
}
catch (Exception ex)
{
cmd.Transaction.Rollback();//中途出错,事务回滚
throw ex;
}
}
catch (Exception ex) {
throw ex;
}
finally
{
con.Close();
}
}