public void BeginTransaction(TimeSpan timeout) { int tid = Thread.CurrentThread.ManagedThreadId; var conn = this.Pool.GetConnection(); SqlTransaction2 tran = null; Exception ex = Lib.Trys(delegate() { if (conn.SqlConnection.State == ConnectionState.Closed) { conn.SqlConnection.Open(); } tran = new SqlTransaction2(conn, conn.SqlConnection.BeginTransaction(), timeout); }, 1); if (ex != null) { Log.LogError(new EventId(9999, "数据库出错(开启事务)"), ex, "数据库出错(开启事务)"); throw ex; } if (_trans.ContainsKey(tid)) { CommitTransaction(); } lock (_trans_lock) { _trans.Add(tid, tran); _trans_tmp.Add(tran); } }
private void CommitTransaction(bool isCommit, SqlTransaction2 tran) { if (tran == null || tran.Transaction == null || tran.Transaction.Connection == null) { return; } lock (_trans_lock) { _trans.Remove(tran.Conn.ThreadId); _trans_tmp.Remove(tran); } try { if (isCommit) { tran.Transaction.Commit(); } else { tran.Transaction.Rollback(); } this.Pool.ReleaseConnection(tran.Conn); } catch { } }