/// <summary>
        /// This method extracts metadata and actual data for each column supplied
        /// by extracting data and information from every DataFrameColumn.
        /// </summary>
        public unsafe void ExtractColumns(DataFrame CSharpDataFrame)
        {
            Logging.Trace("CSharpOutputDataSet::ExtractColumns");
            _strLenOrNullMapPtrs = new int *[ColumnsNumber];
            _dataPtrs            = new void *[ColumnsNumber];
            for (ushort columnNumber = 0; columnNumber < ColumnsNumber; ++columnNumber)
            {
                DataFrameColumn column = CSharpDataFrame.Columns[columnNumber];

                // Add column metadata to a CSharpColumn dictionary
                //
                _columns[columnNumber] = new CSharpColumn
                {
                    Name          = column.Name,
                    DataType      = DataTypeMap[column.DataType],
                    Nullable      = (short)(column.NullCount > 0 ? 1 : 0),
                    DecimalDigits = 0,
                    Size          = (ulong)DataTypeSize[DataTypeMap[column.DataType]],
                    Id            = columnNumber
                };

                // Extract actual column data from a DataFrameColumn and store into a void pointers array
                //
                ExtractColumn(columnNumber, column);
            }
        }
        /// <summary>
        /// This method appends each column as a CSharpColumn object to a dictionary.
        /// </summary>
        public void InitColumn(
            ushort columnNumber,
            string columnName,
            ulong columnSize,
            SqlDataType dataType,
            short nullable,
            short decimalDigits)
        {
            Logging.Trace("CSharpInputDataSet::InitColumn");
            if (columnName == null)
            {
                throw new ArgumentException("Invalid input column name supplied");
            }

            else if (columnNumber >= ColumnsNumber || columnNumber < 0)
            {
                throw new ArgumentException("Invalid input column id supplied: " + columnNumber.ToString());
            }

            _columns[columnNumber] = new CSharpColumn
            {
                Name          = columnName,
                DataType      = dataType,
                DecimalDigits = decimalDigits,
                Nullable      = nullable,
                Size          = columnSize,
                Id            = columnNumber
            };
        }