/// <summary>
 ///     DataSet包装
 /// </summary>
 /// <param name="set"></param>
 private void FromPackage(DataSet set)
 {
     if (set.Tables.Count != 0)
     {
         using (var TmphBuilder = new TmphDataWriter())
         {
             _tables = set.Tables.toGeneric<DataTable>().getArray(table => TmphDataTable.From(table, TmphBuilder));
             _data = TmphBuilder.Get();
         }
     }
     _name = set.DataSetName;
 }
 /// <summary>
 ///     DataTable包装
 /// </summary>
 /// <param name="table"></param>
 /// <returns></returns>
 public static TmphDataTable From(DataTable table)
 {
     if (table == null) return null;
     var value = new TmphDataTable();
     if ((value._rowCount = table.Rows.Count) != 0)
     {
         using (var TmphBuilder = new TmphDataWriter())
         {
             value.FromPackage(table, TmphBuilder);
             value._data = TmphBuilder.Get();
         }
     }
     return value;
 }
 /// <summary>
 ///     DataTable包装
 /// </summary>
 /// <param name="table"></param>
 /// <param name="TmphBuilder">数据流包装器</param>
 /// <returns></returns>
 public static TmphDataTable From(DataTable table, TmphDataWriter TmphBuilder)
 {
     var value = new TmphDataTable();
     if ((value._rowCount = table.Rows.Count) != 0) value.FromPackage(table, TmphBuilder);
     value._name = table.TableName;
     return value;
 }
 /// <summary>
 ///     DataTable包装
 /// </summary>
 /// <param name="table"></param>
 /// <param name="TmphBuilder">数据流包装器</param>
 private unsafe void FromPackage(DataTable table, TmphDataWriter TmphBuilder)
 {
     var index = 0;
     _columnNames = new string[table.Columns.Count];
     fixed (byte* columnFixed = _columnTypes = new byte[_columnNames.Length])
     {
         var 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])
         {
             var nullMap = new TmphFixedMap(nullFixed);
             index = 0;
             foreach (DataRow row in table.Rows)
             {
                 columnIndex = columnFixed;
                 foreach (var value in row.ItemArray)
                 {
                     if (value == DBNull.Value) nullMap.Set(index);
                     else TmphBuilder.Append(value, *columnIndex);
                     ++index;
                     ++columnIndex;
                 }
             }
         }
     }
 }