/// <summary>
        /// When the database connection is closed, all commands linked to this connection are automatically reset.
        /// </summary>
        public override void Close()
        {
            if (_sql != null)
            {
                if (_enlistment != null)
                {
                    // If the connection is enlisted in a transaction scope and the scope is still active,
                    // we cannot truly shut down this connection until the scope has completed.  Therefore make a
                    // hidden connection temporarily to hold open the connection until the scope has completed.
                    var cnn = new SqliteConnection
                    {
                        _sql = this._sql,
                        _transactionLevel = this._transactionLevel,
                        _enlistment       = this._enlistment,
                        _connectionState  = this._connectionState,
                        _version          = this._version
                    };

                    cnn._enlistment._transaction._cnn  = cnn;
                    cnn._enlistment._disposeConnection = true;
                    _sql        = null;
                    _enlistment = null;
                }
                if (_sql != null)
                {
                    _sql.Close();
                }
                _sql = null;
                _transactionLevel = 0;
            }
            OnStateChange(ConnectionState.Closed);
        }
        /// <summary>
        /// Manual distributed transaction enlistment support
        /// </summary>
        /// <param name="transaction">The distributed transaction to enlist in</param>
        public override void EnlistTransaction(System.Transactions.Transaction transaction)
        {
            if (_transactionLevel > 0 && transaction != null)
            {
                throw new ArgumentException("Unable to enlist in transaction, a local transaction already exists");
            }

            if (_enlistment != null && transaction != _enlistment._scope)
            {
                throw new ArgumentException("Already enlisted in a transaction");
            }

            _enlistment = new SQLiteEnlistment(this, transaction);
        }
Ejemplo n.º 3
0
    /// <summary>
    /// Manual distributed transaction enlistment support
    /// </summary>
    /// <param name="transaction">The distributed transaction to enlist in</param>
    public override void EnlistTransaction(System.Transactions.Transaction transaction)
    {
      if (_transactionLevel > 0 && transaction != null)
        throw new ArgumentException("Unable to enlist in transaction, a local transaction already exists");

      if (_enlistment != null && transaction != _enlistment._scope)
        throw new ArgumentException("Already enlisted in a transaction");

      _enlistment = new SQLiteEnlistment(this, transaction);
    }
Ejemplo n.º 4
0
    /// <summary>
    /// When the database connection is closed, all commands linked to this connection are automatically reset.
    /// </summary>
    public override void Close()
    {
      if (_sql != null)
      {
#if !PLATFORM_COMPACTFRAMEWORK
        if (_enlistment != null)
        {
          // If the connection is enlisted in a transaction scope and the scope is still active,
          // we cannot truly shut down this connection until the scope has completed.  Therefore make a 
          // hidden connection temporarily to hold open the connection until the scope has completed.
          SqliteConnection cnn = new SqliteConnection();
          cnn._sql = _sql;
          cnn._transactionLevel = _transactionLevel;
          cnn._enlistment = _enlistment;
          cnn._connectionState = _connectionState;
          cnn._version = _version;

          cnn._enlistment._transaction._cnn = cnn;
          cnn._enlistment._disposeConnection = true;
          _sql = null;
          _enlistment = null;
        }
#endif
        if (_sql != null)
        {
          _sql.Close();
        }
        _sql = null;
        _transactionLevel = 0;
      }
      OnStateChange(ConnectionState.Closed);
    }
Ejemplo n.º 5
0
        /// <summary>
        /// When the database connection is closed, all commands linked to this connection are automatically reset.
        /// </summary>
        public override void Close()
        {
            if (_sql != null)
            {
                if (_enlistment != null)
                {
                    // If the connection is enlisted in a transaction scope and the scope is still active,
                    // we cannot truly shut down this connection until the scope has completed.  Therefore make a 
                    // hidden connection temporarily to hold open the connection until the scope has completed.
                    var cnn = new SqliteConnection
                                  {
                                      _sql = this._sql,
                                      _transactionLevel = this._transactionLevel,
                                      _enlistment = this._enlistment,
                                      _connectionState = this._connectionState,
                                      _version = this._version
                                  };

                    cnn._enlistment._transaction._cnn = cnn;
                    cnn._enlistment._disposeConnection = true;
                    _sql = null;
                    _enlistment = null;
                }
                if (_sql != null)
                {
                    _sql.Close();
                }
                _sql = null;
                _transactionLevel = 0;
            }
            OnStateChange(ConnectionState.Closed);
        }