private static void WriteColumnToStreamBinary(HashColumnsTransformation.HashColumnInfo hCol, HashColumnsTransformation.InputBufferColumnInfo bci, PipelineBuffer buffer, HashMemoryBuffers mb, StreamWriter sw) { int ci = bci.Index; byte[] bdata = null; byte[] decimalArray = new byte[16]; //Array for storing decimal numbers string asciiStr = null; BinaryWriter bw = mb.BinaryWriter; BufferColumn col = buffer.GetColumnInfo(bci.Index); bw.Write((byte)0);//Write byte (0) as start of field; if (buffer.IsNull(bci.Index)) { bw.Write((byte)1); //Write 1 representing NULL bw.Write(0); //write length of 0 for NULL } else { bw.Write((byte)0); //write 0 representing NOT NULL //Get buffer data lock (bci) { switch (col.DataType) { case DataType.DT_BOOL: bdata = BitConverter.GetBytes(buffer.GetBoolean(ci)); break; case DataType.DT_BYTES: bdata = buffer.GetBytes(ci); break; case DataType.DT_IMAGE: bdata = buffer.GetBlobData(ci, 0, (int)buffer.GetBlobLength(ci)); break; case DataType.DT_CY: case DataType.DT_DECIMAL: case DataType.DT_NUMERIC: bdata = Encoding.ASCII.GetBytes(buffer.GetDecimal(ci).ToString(CultureInfo.InvariantCulture)); break; case DataType.DT_DATE: case DataType.DT_DBTIMESTAMP: case DataType.DT_DBTIMESTAMP2: bw.Write(buffer.GetDateTime(ci).ToBinary()); break; case DataType.DT_FILETIME: bw.Write(buffer.GetInt64(ci)); break; case DataType.DT_DBDATE: bw.Write(buffer.GetDate(ci).ToBinary()); break; case DataType.DT_DBTIME: case DataType.DT_DBTIME2: bw.Write(buffer.GetTime(ci).Ticks); break; case DataType.DT_DBTIMESTAMPOFFSET: var dtoffset = buffer.GetDateTimeOffset(ci); BitConverter.GetBytes(dtoffset.DateTime.ToBinary()).CopyTo(decimalArray, 0); BitConverter.GetBytes(dtoffset.Offset.Ticks).CopyTo(decimalArray, 8); bw.Write(decimalArray); break; case DataType.DT_EMPTY: case DataType.DT_NULL: bdata = new byte[0]; break; case DataType.DT_GUID: bw.Write(Encoding.ASCII.GetBytes(buffer.GetGuid(ci).ToString())); break; case DataType.DT_I1: asciiStr = buffer.GetSByte(ci).ToString(CultureInfo.InvariantCulture); break; case DataType.DT_I2: asciiStr = buffer.GetInt16(ci).ToString(CultureInfo.InvariantCulture); break; case DataType.DT_I4: asciiStr = buffer.GetInt32(ci).ToString(CultureInfo.InvariantCulture); break; case DataType.DT_I8: asciiStr = buffer.GetInt64(ci).ToString(CultureInfo.InvariantCulture); break; case DataType.DT_R4: asciiStr = buffer.GetSingle(ci).ToString(CultureInfo.InvariantCulture); break; case DataType.DT_R8: asciiStr = buffer.GetDouble(ci).ToString(CultureInfo.InvariantCulture); break; case DataType.DT_UI1: asciiStr = buffer.GetByte(ci).ToString(CultureInfo.InvariantCulture); break; case DataType.DT_UI2: asciiStr = buffer.GetUInt16(ci).ToString(CultureInfo.InvariantCulture); break; case DataType.DT_UI4: asciiStr = buffer.GetUInt32(ci).ToString(CultureInfo.InvariantCulture); break; case DataType.DT_UI8: asciiStr = buffer.GetUInt64(ci).ToString(CultureInfo.InvariantCulture); break; case DataType.DT_NTEXT: case DataType.DT_TEXT: case DataType.DT_STR: case DataType.DT_WSTR: bdata = Encoding.Unicode.GetBytes(TrimString(hCol, buffer.GetString(ci))); break; default: bdata = new byte[0]; break; } } if (asciiStr != null) { bdata = Encoding.ASCII.GetBytes(asciiStr); } if (bdata != null) { bw.Write(bdata.Length); //write length of buffer bw.Write(bdata); //write bufferdata; } } }