自.net2.0以來增加了system.transactions命名空間,為.net應用程式帶來了乙個新的事務程式設計模型。
這個命名空間提供了幾個依賴的transaction***類。transaction是所有事務處理類的基類,並且定義了所有事務類都可以使用的屬性、方法和事件。committabletransaction是唯一個支援提交的事務類,這個類有乙個commit()方法,所有其他事務類都只能執行回滾。
本文將通過銀行轉賬的示例介紹基於 transaction 類的分布式顯式事務的用法。
在mysql中建立如下表:
注意balance是無符號的decimal型別(如下圖)
插入測試資料:
**賬成功的測試資料):
**賬失敗的測試資料):
示例**:
(1)sqlhelper.cs
using system.collections.generic;
using system.linq;
using system.web;
using system.configuration;
using mysql.data.mysqlclient;
using system.transactions;
using system.data;
namespace 事務處理
publicstatic
int executenonquery(transaction transaction,string sql,params mysqlparameter parameters)
using (mysqlcommand cmd = conn.createcommand())
}
return result;
}
publicstatic datatable executedatatable(string sql, params mysqlparameter parameters)
}
}
}
}
}
}(2)bankaccountn.cs
using system;
using system.collections.generic;
using system.linq;
using system.web;
using mysql.data.mysqlclient;
using system.data;
using system.transactions;
namespace 事務處理
elseif (dt.rows.count > 1)
else
}
privatestring bankaccountnid;
publicstring username
publicdecimal balance
protectedint update(transaction transaction)
#region 支出 + epend(transaction transaction, decimal money)
publicvoid epend(transaction transaction, decimal money)
#endregion
#region 收入 + income(transaction transaction, decimal money)
publicvoid income(transaction transaction, decimal money)
#endregion
publicbool transferofaccount(string incomebankaccountnid, decimal money)
catch
}
}
}
}(3)測試**
bankaccountn one = new bankaccountn("6666660123456789");
if (one.transferofaccount("6666669876543210", 200m))
else**分析:
建立基於 transaction 類的分布式顯式事務步驟如下:
1)例項化乙個可提交的committabletransaction物件;
2)將要參與事務的連線通過mysqlconnection物件的enlisttransaction(transaction transaction)登記到上一步建立的committabletransaction物件上;
3)如果事務可以成功完成,使用committabletransaction物件的commit()方法提交事務處理結果;
4)如果事務處理中發生錯誤,就呼叫committabletransaction物件的rollback()方法,撤銷每乙個修改。
這樣分析下來是不是和上一節的ado.net事務一樣簡單?
事務(Transaction)的理解
事務 transaction 的理解 transaction有交易的意思,sip是個事務型的協議,因為它需要各部件間互通訊息來實現。事務所處的位置如圖 圖一 事務環境圖 1 事務處理主要用於處理訊息的互動,它的實現使用了狀態機。向上它向事務使用者 tu 提交事務的觸發事件 計時器超時和傳輸層訊息 向...
LR中的事務(transaction)
事務 事務是要度量其伺服器響應時間的任務或操作集。乙個完整的事務是由事務開始 事務結束以及乙個或多個業務操作 任務構成。形式如圖1 5所示 圖1 5 乙個事務示例 段 插入乙個事務有兩種方式來實現,一種是手工方式,另外一種是利用選單或者工具條進行事務的新增。手工方式要求編寫指令碼人員必須十分清楚指令...
redis中事務(Transaction)的使用
redis是乙個開源的使用ansi c語言編寫 支援網路 可基於記憶體亦可持久化的日誌型 key value資料庫,提供多種語言的api,支援多種資料儲存方式。開發中一般用於快取,佇列,資料庫使用。redis中的事務與傳統關係型資料庫 如mysql 的事務是不同的。redis中的事務是一組命令的集合...