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); } }