namespace 事務處理
{
public class SqlHelper
{
public static string GetConnection()
{
string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
return connStr;
}
public static int ExecuteNonQuery(Transaction transaction,string sql,params MySqlParameter[] parameters)
{
int result = -1;
using (MySqlConnection conn = new MySqlConnection(GetConnection()))
{
conn.Open();
if (null != transaction)
{
conn.EnlistTransaction(transaction); //將鏈接登記到事務
}
using (MySqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
result = cmd.ExecuteNonQuery();
}
}
return result;
}
public static DataTable ExecuteDataTable(string sql, params MySqlParameter[] parameters)
{
using (MySqlConnection conn = new MySqlConnection(GetConnection()))
{
using (MySqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
{
using (DataSet ds = new DataSet())
{
da.Fill(ds);
return ds.Tables[0];
}
}
}
}
}
}
}
建立基於 Transaction 類的分佈式顯式事務步驟以下:sql
1)實例化一個可提交的CommittableTransaction對象;分佈式
2)將要參與事務的鏈接經過MySqlConnection對象的EnlistTransaction(Transaction transaction)登記到上一步建立的CommittableTransaction對象上;spa
3)若是事務能夠成功完成,使用CommittableTransaction對象的Commit()方法提交事務處理結果;對象
4)若是事務處理中發生錯誤,就調用CommittableTransaction對象的Rollback()方法,撤銷每個修改。事務