string constr = ConfigurationManager.ConnectionStrings["myCon"].ConnectionString;
string constr2 = ConfigurationManager.ConnectionStrings["myCon2"].ConnectionString;
string sql = "insert into [Tuser](username,pwd,age) values('CommittableTransaction事務','bbb',10)";
string sq2 = "insert into [Tuser](username,pwd,age) values('CommittableTransaction事務','bbb','sssssss')";
#region CommittableTransaction 分布式
using(SqlConnection con=new SqlConnection(constr),con2=new SqlConnection(constr2))
{
con.Open();
con2.Open();
CommittableTransaction ct = new CommittableTransaction();//CommittableTransaction要在串連開啟後建立
//由此可看出事務的效能並不好。
con.EnlistTransaction(ct);//在CommittableTransaction登記分散式交易
con2.EnlistTransaction(ct);
try
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
int a = cmd.ExecuteNonQuery();
Console.WriteLine(a);
}
using (SqlCommand cmd = new SqlCommand(sq2, con2))
{
int b = cmd.ExecuteNonQuery();
Console.WriteLine(b);
}
ct.Commit();//提交事務
}
catch (Exception ess)
{
Console.WriteLine(ess.Message);
ct.Rollback();//復原事務
}
//因為了串連在其他地方使用。必須清除分布事務。
con.EnlistTransaction(null);
con2.EnlistTransaction(null);
}
#endregion
雖然實現了分布式的事務。但感覺效能真的太差。故在能不用分散式交易。最好不要用。特別是多事務並發時候。