/// <summary>
        /// Manual distributed transaction enlistment support
        /// </summary>
        /// <param name="transaction">The distributed transaction to enlist in</param>
        public override void EnlistTransaction(Portable.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);
        }
        /// <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 SqliteAdoConnection(_sqliteDbConnection, _cryptEngine) {
                        _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.Dispose();
                    //_sql.Close();
                }
                _sql = null;
                _transactionLevel = 0;
            }
            OnStateChange(ConnectionState.Closed);
        }