利用EnterPriseServices可以免费获得很多的服务,其中之一就是自动事务处理。EnterPriseServices目前主要由新技术替代,例如System.Transactions,WCF,和Windows应用服务器。EnterpriceServices的事务特性影响了System.Transaction的功能,因此这里介绍EnterPriseServices。
通过EnterPriseServices使用事务的优点是,不需要显示地进行事务处理,运行库会自动创建事务,只需要给事务处理要求的添加[Transaction]特性即可。[AutoComplete]特性把方法标记自动设置事务的状态位:
using System.EnterpriseServices;
[Transaction(TransactionOption.Required)]
public class StudentService : ServicedComponent
{
private readonly string connString =
System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
[AutoComplete]
public void AddStudent()
{
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
System.Data.SqlClient.SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "insert into student(name,age) values(@name,@age)";
try
{
cmd.Parameters.AddWithValue("@name", "张三");
cmd.Parameters.AddWithValue("@age", "20");
conn.Open();
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}
}
用EnterpriseServices创建事务的一大优点是,多个对象能轻松地运行在同一个事务中,事务还可以自动登记,缺点是它需要COM+主机模型,使用这个技术的类必须派生基类ServicedComponent。