1.隐式事务(TransactionScope)
超出事务范围时 如果没有手动调用Complete()方法,则不会提交事务
string strConn = "server=.;uid=sa;pwd=123;database=db_test;";
string strSql = "insert into user_info (name,tel) values ('ee',13590305258)";
using (TransactionScope tran = new TransactionScope())
{
using (SqlConnection conn = new SqlConnection(strConn))
{
conn.Open();
SqlCommand cmd = new SqlCommand(strSql, conn);
cmd.CommandType = CommandType.Text;
int result = cmd.ExecuteNonQuery();
if (result == 1)
{
Console.WriteLine("数据添加成功...");
}
conn.Close();
}
Console.WriteLine("请输入1或0 1提交事务;0回滚事务....");
int key = Convert.ToInt32(Console.ReadLine());
if (key == 0)
{
//回滚当前环境中正在运行的事务
//System.Transactions.Transaction.Current.Rollback();
Console.WriteLine("回滚事务完毕...");
}
else
{
tran.Complete(); //超出事务范围时 如果没有手动调用Complete()方法,则不会提交事务
Console.WriteLine("提交事务完毕...");
}
}
2.显式事务
创建 CommittableTransaction 的实例并不会自动设置环境事务上下文。因此,资源管理器上的任何操作都不属于该事务。全局 Transaction 对象上的静态 Current 属性用于设置或检索环境事务,应用程序必须手动设置该属性,才能确保资源管理器可参与事务
string strConn = "server=.;uid=sa;pwd=123;database=db_test;"; string strSql = "insert into user_info (name,tel) values ('ee',13590305258)"; CommittableTransaction tran = new CommittableTransaction(); using (SqlConnection conn = new SqlConnection(strConn)) { conn.Open(); conn.EnlistTransaction(tran); //需要把事务添加到当前环境中.... SqlCommand cmd = new SqlCommand(strSql, conn); cmd.CommandType = CommandType.Text; int result = cmd.ExecuteNonQuery(); if (result == 1) { Console.WriteLine("数据添加成功..."); } conn.Close(); } Console.WriteLine("请输入1或0 1提交事务;0回滚事务...."); int key = Convert.ToInt32(Console.ReadLine()); if (key == 0) { tran.Rollback(); Console.WriteLine("回滚事务完毕..."); } else { tran.Commit(); Console.WriteLine("提交事务完毕..."); }

浙公网安备 33010602011771号