Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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 { }
        }