internal SqlCachedBuffer(SqlMetaDataPriv metadata, TdsParser parser, TdsParserStateObject stateObj) { int len = 0; this._cachedBytes = new ArrayList(); ulong num = parser.PlpBytesLeft(stateObj); do { if (num == 0L) { return; } do { len = (num > 0x800L) ? 0x800 : ((int) num); byte[] buff = new byte[len]; len = stateObj.ReadPlpBytes(ref buff, 0, len); if (this._cachedBytes.Count == 0) { this.AddByteOrderMark(buff); } this._cachedBytes.Add(buff); num -= len; } while (num > 0L); num = parser.PlpBytesLeft(stateObj); } while (num > 0L); }
internal void ReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, int length, TdsParserStateObject stateObj) { if (md.metaType.IsPlp) { length = 0x7fffffff; } switch (md.tdsType) { case 0x22: case 0x25: case 0x2d: case 240: case 0xa5: case 0xad: { byte[] buff = null; if (md.metaType.IsPlp) { stateObj.ReadPlpBytes(ref buff, 0, length); } else { buff = new byte[length]; stateObj.ReadByteArray(buff, 0, length); } value.SqlBinary = new SqlBinary(buff, true); return; } case 0x23: case 0x27: case 0x2f: case 0x63: case 0xef: case 0xe7: case 0xa7: case 0xaf: this.ReadSqlStringValue(value, md.tdsType, length, md.encoding, md.metaType.IsPlp, stateObj); return; case 40: case 0x29: case 0x2a: case 0x2b: this.ReadSqlDateTime(value, md.tdsType, length, md.scale, stateObj); return; case 0x6a: case 0x6c: this.ReadSqlDecimal(value, length, md.precision, md.scale, stateObj); return; case 0xf1: { SqlCachedBuffer buffer2 = new SqlCachedBuffer(md, this, stateObj); value.SqlCachedBuffer = buffer2; return; } } this.ReadSqlValueInternal(value, md.tdsType, md.metaType.TypeId, length, stateObj); }