基於 Transaction 類的分布式顯式事務

2021-09-06 15:49:18 字數 3308 閱讀 8600

自.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 事務處理
public

static

int executenonquery(transaction transaction,string sql,params mysqlparameter parameters)

using (mysqlcommand cmd = conn.createcommand())
}
return result;
}
public

static 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 事務處理
else

if (dt.rows.count > 1)

else
}
private

string bankaccountnid;

public

string username

public

decimal balance

protected

int update(transaction transaction)

#region 支出 + epend(transaction transaction, decimal money)
public

void epend(transaction transaction, decimal money)

#endregion
#region 收入 + income(transaction transaction, decimal money)
public

void income(transaction transaction, decimal money)

#endregion
public

bool 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中的事務是一組命令的集合...