protected override byte[] GetSegment() { short requested = (short)this.SegmentSize; short segmentLength = 0; lock (this.db) { int[] statusVector = FesConnection.GetNewStatusVector(); MemoryStream segment = new MemoryStream(); byte[] tmp = new byte[requested]; int status = FbClient.isc_get_segment( statusVector, ref this.blobHandle, ref segmentLength, requested, tmp); if (segmentLength > 0) { segment.Write(tmp, 0, segmentLength > requested ? requested : segmentLength); } this.RblRemoveValue(IscCodes.RBL_segment); if (statusVector[1] == IscCodes.isc_segstr_eof) { segment.SetLength(0); this.RblAddValue(IscCodes.RBL_eof_pending); } else { if (status == 0 || statusVector[1] == IscCodes.isc_segment) { this.RblAddValue(IscCodes.RBL_segment); } else { this.db.ParseStatusVector(statusVector); } } return(segment.ToArray()); } }