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;
                }
            }
        }