private void ReadFromClientRowData() { for (var i = 0; i < m_driverRowData.NotNulls.Length; i++) { m_driverRowData.NotNulls[i] = m_readerBuffer.NotNulls[i]; } for (var ordinal = 0; ordinal < m_readerBuffer.FieldTypes.Length; ordinal++) { var indexInArray = m_readerBuffer.GetIndexInArray(ordinal); if (!BitVector.Get(m_driverRowData.NotNulls, ordinal)) { continue; } switch (m_readerBuffer.FieldRepresentationTypes[ordinal]) { case RowData.DataTypeRepresentation.ByteArray: { var dest = m_driverRowData.BinaryData[indexInArray]; if (dest == null) { dest = new SizableArrayOfByte(); m_driverRowData.BinaryData[indexInArray] = dest; } var src = m_readerBuffer.BinaryData[indexInArray]; dest.SetLength(src.Length); if (src.Length > 0) { Buffer.BlockCopy(src.Data, 0, dest.Data, 0, src.Length); } } break; case RowData.DataTypeRepresentation.CharArray: { var src = m_readerBuffer.StringData[indexInArray]; m_driverRowData.StringData[indexInArray] = src == null || src.Length == 0 ? string.Empty : new string(src.Data, 0, src.Length); } break; case RowData.DataTypeRepresentation.Value8Bytes: m_driverRowData.ValueData8Bytes[indexInArray].AsInt64 = m_readerBuffer.ValueData8Bytes[indexInArray].AsInt64; break; case RowData.DataTypeRepresentation.Value16Bytes: m_driverRowData.ValueData16Bytes[indexInArray].Lo = m_readerBuffer.ValueData16Bytes[indexInArray].Lo; m_driverRowData.ValueData16Bytes[indexInArray].Hi = m_readerBuffer.ValueData16Bytes[indexInArray].Hi; break; default: throw new InvalidOperationException("Invalid representation type: " + m_readerBuffer.FieldRepresentationTypes[ordinal]); } } }