public override void BeginTransaction(TransactionParameterBuffer tpb)
        {
            if (_state != TransactionState.NoTransaction)
            {
                throw new InvalidOperationException();
            }

            try
            {
                GenericResponse response;
                _database.XdrStream.Write(IscCodes.op_transaction);
                _database.XdrStream.Write(_database.Handle);
                _database.XdrStream.WriteBuffer(tpb.ToArraySegment());
                _database.XdrStream.Flush();

                response = _database.ReadGenericResponse();

                _database.TransactionCount++;

                _handle = response.ObjectHandle;
                _state  = TransactionState.Active;
            }
            catch (IOException ex)
            {
                throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex);
            }
        }