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