public override long GetBytes( int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length) { byte[] numArray = (byte[])this._values[ordinal]; int length1 = numArray.Length; if (fieldOffset > (long)int.MaxValue) { throw new ArgumentOutOfRangeException(nameof(fieldOffset), Strings.ADP_InvalidSourceBufferIndex((object)length1.ToString((IFormatProvider)CultureInfo.InvariantCulture), (object)fieldOffset.ToString((IFormatProvider)CultureInfo.InvariantCulture))); } int sourceIndex = (int)fieldOffset; if (buffer == null) { return((long)length1); } try { if (sourceIndex < length1) { if (sourceIndex + length > length1) { length1 -= sourceIndex; } else { length1 = length; } } Array.Copy((Array)numArray, sourceIndex, (Array)buffer, bufferOffset, length1); } catch (Exception ex) { if (ex.IsCatchableExceptionType()) { int length2 = numArray.Length; if (length < 0) { throw new IndexOutOfRangeException(Strings.ADP_InvalidDataLength((object)((long)length).ToString((IFormatProvider)CultureInfo.InvariantCulture))); } if (bufferOffset < 0 || bufferOffset >= buffer.Length) { throw new ArgumentOutOfRangeException(nameof(bufferOffset), Strings.ADP_InvalidDestinationBufferIndex((object)length.ToString((IFormatProvider)CultureInfo.InvariantCulture), (object)bufferOffset.ToString((IFormatProvider)CultureInfo.InvariantCulture))); } if (fieldOffset < 0L || fieldOffset >= (long)length2) { throw new ArgumentOutOfRangeException(nameof(fieldOffset), Strings.ADP_InvalidSourceBufferIndex((object)length.ToString((IFormatProvider)CultureInfo.InvariantCulture), (object)fieldOffset.ToString((IFormatProvider)CultureInfo.InvariantCulture))); } if (length2 + bufferOffset > buffer.Length) { throw new IndexOutOfRangeException(Strings.ADP_InvalidBufferSizeOrIndex((object)length2.ToString((IFormatProvider)CultureInfo.InvariantCulture), (object)bufferOffset.ToString((IFormatProvider)CultureInfo.InvariantCulture))); } } throw; } return((long)length1); }
public override long GetChars(int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length) { var cchars = 0; int ndataIndex; var data = (string)_values[ordinal]; cchars = data.Length; // since arrays can't handle 64 bit values and this interface doesn't // allow chunked access to data, a dataIndex outside the rang of Int32 // is invalid if (fieldOffset > Int32.MaxValue) { throw new ArgumentOutOfRangeException( "fieldOffset", Strings.ADP_InvalidSourceBufferIndex( cchars.ToString(CultureInfo.InvariantCulture), fieldOffset.ToString(CultureInfo.InvariantCulture))); } ndataIndex = (int)fieldOffset; // if no buffer is passed in, return the number of characters we have if (null == buffer) { return(cchars); } try { if (ndataIndex < cchars) { // help the user out in the case where there's less data than requested if ((ndataIndex + length) > cchars) { cchars = cchars - ndataIndex; } else { cchars = length; } } data.CopyTo(ndataIndex, buffer, bufferOffset, cchars); } catch (Exception e) { if (e.IsCatchableExceptionType()) { cchars = data.Length; if (length < 0) { throw new IndexOutOfRangeException( Strings.ADP_InvalidDataLength(((long)length).ToString(CultureInfo.InvariantCulture))); } // if bad buffer index, throw if (bufferOffset < 0 || bufferOffset >= buffer.Length) { throw new ArgumentOutOfRangeException( "bufferOffset", Strings.ADP_InvalidDestinationBufferIndex( buffer.Length.ToString(CultureInfo.InvariantCulture), bufferOffset.ToString(CultureInfo.InvariantCulture))); } // if bad data index, throw if (fieldOffset < 0 || fieldOffset >= cchars) { throw new ArgumentOutOfRangeException( "fieldOffset", Strings.ADP_InvalidSourceBufferIndex( cchars.ToString(CultureInfo.InvariantCulture), fieldOffset.ToString(CultureInfo.InvariantCulture))); } // if there is not enough room in the buffer for data if (cchars + bufferOffset > buffer.Length) { throw new IndexOutOfRangeException( Strings.ADP_InvalidBufferSizeOrIndex( cchars.ToString(CultureInfo.InvariantCulture), bufferOffset.ToString(CultureInfo.InvariantCulture))); } } throw; } return(cchars); }
public override long GetChars( int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length) { string str = (string)this._values[ordinal]; int count = str.Length; if (fieldOffset > (long)int.MaxValue) { throw new ArgumentOutOfRangeException(nameof(fieldOffset), Strings.ADP_InvalidSourceBufferIndex((object)count.ToString((IFormatProvider)CultureInfo.InvariantCulture), (object)fieldOffset.ToString((IFormatProvider)CultureInfo.InvariantCulture))); } int sourceIndex = (int)fieldOffset; if (buffer == null) { return((long)count); } try { if (sourceIndex < count) { if (sourceIndex + length > count) { count -= sourceIndex; } else { count = length; } } str.CopyTo(sourceIndex, buffer, bufferOffset, count); } catch (Exception ex) { if (ex.IsCatchableExceptionType()) { int length1 = str.Length; if (length < 0) { throw new IndexOutOfRangeException(Strings.ADP_InvalidDataLength((object)((long)length).ToString((IFormatProvider)CultureInfo.InvariantCulture))); } if (bufferOffset < 0 || bufferOffset >= buffer.Length) { throw new ArgumentOutOfRangeException(nameof(bufferOffset), Strings.ADP_InvalidDestinationBufferIndex((object)buffer.Length.ToString((IFormatProvider)CultureInfo.InvariantCulture), (object)bufferOffset.ToString((IFormatProvider)CultureInfo.InvariantCulture))); } if (fieldOffset < 0L || fieldOffset >= (long)length1) { throw new ArgumentOutOfRangeException(nameof(fieldOffset), Strings.ADP_InvalidSourceBufferIndex((object)length1.ToString((IFormatProvider)CultureInfo.InvariantCulture), (object)fieldOffset.ToString((IFormatProvider)CultureInfo.InvariantCulture))); } if (length1 + bufferOffset > buffer.Length) { throw new IndexOutOfRangeException(Strings.ADP_InvalidBufferSizeOrIndex((object)length1.ToString((IFormatProvider)CultureInfo.InvariantCulture), (object)bufferOffset.ToString((IFormatProvider)CultureInfo.InvariantCulture))); } } throw; } return((long)count); }