예제 #1
0
        /// <summary>
        /// DataTable包装
        /// </summary>
        /// <param name="table"></param>
        /// <param name="builder">数据流包装器</param>
        /// <returns></returns>
        internal static dataTable From(DataTable table, dataWriter builder)
        {
            dataTable value = new dataTable();

            if ((value.rowCount = table.Rows.Count) != 0)
            {
                value.from(table, builder);
            }
            value.name = table.TableName;
            return(value);
        }
예제 #2
0
 /// <summary>
 /// DataSet包装
 /// </summary>
 /// <param name="set"></param>
 private void from(DataSet set)
 {
     if (set.Tables.Count != 0)
     {
         using (dataWriter builder = new dataWriter())
         {
             tables = set.Tables.toGeneric <DataTable>().getArray(table => dataTable.From(table, builder));
             data   = builder.Get();
         }
     }
     name = set.DataSetName;
 }
예제 #3
0
        /// <summary>
        /// DataTable包装
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public static dataTable From(DataTable table)
        {
            if (table == null)
            {
                return(null);
            }
            dataTable value = new dataTable();

            if ((value.rowCount = table.Rows.Count) != 0)
            {
                using (dataWriter builder = new dataWriter())
                {
                    value.from(table, builder);
                    value.data = builder.Get();
                }
            }
            return(value);
        }
예제 #4
0
        /// <summary>
        /// DataTable包装
        /// </summary>
        /// <param name="table"></param>
        /// <param name="builder">数据流包装器</param>
        private unsafe void from(DataTable table, dataWriter builder)
        {
            int index = 0;

            columnNames = new string[table.Columns.Count];
            fixed(byte *columnFixed = columnTypes = new byte[columnNames.Length])
            {
                byte *columnIndex = columnFixed;

                foreach (DataColumn column in table.Columns)
                {
                    if (!typeIndexs.TryGetValue(column.DataType, out *columnIndex))
                    {
                        *columnIndex = 255;
                    }
                    ++columnIndex;
                    columnNames[index++] = column.ColumnName;
                }

                fixed(byte *nullFixed = dbNull = new byte[(columnNames.Length *rowCount + 7) >> 3])
                {
                    fixedMap nullMap = new fixedMap(nullFixed);

                    index = 0;
                    foreach (DataRow row in table.Rows)
                    {
                        columnIndex = columnFixed;
                        foreach (object value in row.ItemArray)
                        {
                            if (value == DBNull.Value)
                            {
                                nullMap.Set(index);
                            }
                            else
                            {
                                builder.Append(value, *columnIndex);
                            }
                            ++index;
                            ++columnIndex;
                        }
                    }
                }
            }
        }