System.Transactions.TransactionScope 实现隐式事务,而 System.Transactions.CommittableTransaction 实现显式事务。
准备工作
- 添加 System.Transactions 引用(在解决方案的项目/网站上右键);
- 引用 System.Transactions 名称空间。
示例讲解
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MySqlServer"].ConnectionString))
{
using (CommittableTransaction ct = new CommittableTransaction())
{
conn.Open();
conn.EnlistTransaction(ct);
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
try
{
cmd.CommandText = "insert into TranTable(Priority) values(1)";
cmd.ExecuteNonQuery();
cmd.CommandText = "insert into TranTable(Priority) values(256)";
cmd.ExecuteNonQuery();
ct.Commit();
Response.Write("Ok");
}
catch (SqlException ex)
{
ct.Rollback();
Response.Write("Error:" + ex.Message);
}
}
conn.Close();
}
}
代码很像前面两节代码的综合,但功能比传统 .NET 事务技术强。