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