/// <summary> /// 数据回收操作 /// </summary> public void Dispose() { if (!this._isDisposed && _daoTransactionScopeList.Count > 0) { if (!this._isComplete) { this._isUnComplete = true; } string currentFlag = ""; for (int i = 0; i < _daoTransactionScopeList.Count; i++) { //if (DaoTransactionScopeList[i] == this) //{ if (currentFlag == "") currentFlag = DaoTransactionScopeList[i].CurrentFlag; _dataAccessInstance = _daoTransactionScopeList[i].DataAccessInstance; if (_dataAccessInstance != null && !_dataAccessInstance.Disposed && DaoTransactionScopeList[i].CurrentFlag == currentFlag) { if ((_dataAccessInstance.State != ConnectionState.Closed) && _dataAccessInstance.IsTransaction) { try { _dataAccessInstance.RollbackTransaction(); //清理失败的SQL语句 _dataAccessInstance.lastSql = null; } catch (Exception exception3) { //清理失败的SQL语句 _dataAccessInstance.lastSql = null; } finally { try { _dataAccessInstance.Dispose(); _dataAccessInstance = null; } catch { } } } } _daoTransactionScopeList[i].IsTransacting = false; } if (this == _transactionOwner) { _transactionOwner = null; } for (int i = _daoTransactionScopeList.Count - 1; i >= 0; i--) { if (_daoTransactionScopeList[i].IsTransacting == false) _daoTransactionScopeList.Remove(DaoTransactionScopeList[i]); } if (_daoTransactionScopeList.Count > 0) { _current = _daoTransactionScopeList[_daoTransactionScopeList.Count - 1]; } else { _current = null; } this._isDisposed = true; } }
/// <summary> /// 实现数据提交信息 /// </summary> public void Complete() { if (this.Disposed) { throw new ObjectDisposedException("DaoTransactionScope"); } if (_current == null) { throw new NullReferenceException("当前的 DaoTransactionScope 对象(DaoTransactionScope.Current 属性值)已不存在。请不要重复调用 Complete() 方法。"); } string currentFlag = ""; for (int i = 0; i < DaoTransactionScopeList.Count; i++) { if (currentFlag == "") currentFlag = DaoTransactionScopeList[i].CurrentFlag; if (DaoTransactionScopeList[i].IsTransacting && DaoTransactionScopeList[i].CurrentFlag == currentFlag) { _dataAccessInstance = DaoTransactionScopeList[i].DataAccessInstance; if ((_dataAccessInstance != null) && _dataAccessInstance.IsTransaction) { _dataAccessInstance.CommitTransaction(); } //DaoTransactionScopeList.Remove(DaoTransactionScopeList[i]); DaoTransactionScopeList[i].IsTransacting = false; try { _dataAccessInstance.Dispose(); _dataAccessInstance = null; } catch { } _transactionOwner = null; } } for (int i = DaoTransactionScopeList.Count - 1; i >= 0; i--) { if (DaoTransactionScopeList[i].IsTransacting == false) DaoTransactionScopeList.Remove(DaoTransactionScopeList[i]); } this._isComplete = true; _current = null; }