/// <summary> /// DataSet拆包 /// </summary> /// <param name="set"></param> private unsafe void set(DataSet set) { if (_tables.length() != 0) { fixed (byte* dataFixed = _data.Data) { var TmphBuilder = new TmphDataReader(dataFixed, _data.Strings, _data.Bytes); foreach (var table in _tables) set.Tables.Add(table.Get(TmphBuilder)); } } }
/// <summary> /// DataTable拆包 /// </summary> /// <param name="table"></param> /// <param name="TmphBuilder">数据对象拆包器</param> private unsafe void Get(DataTable table, TmphDataReader TmphBuilder) { var index = 0; var columns = new DataColumn[_columnNames.Length]; fixed (byte* columnFixed = _columnTypes) { var columnIndex = columnFixed; foreach (var columnName in _columnNames) { columns[index++] = new DataColumn(columnName, *columnIndex < Types.Length ? Types[*columnIndex] : typeof(object)); ++columnIndex; } table.Columns.AddRange(columns); fixed (byte* nullFixed = _dbNull) { var nullMap = new TmphFixedMap(nullFixed); for (index = 0; _rowCount != 0; --_rowCount) { var values = new object[_columnNames.Length]; columnIndex = columnFixed; for (var valueIndex = 0; valueIndex != _columnNames.Length; ++valueIndex) { values[valueIndex] = nullMap.Get(index++) ? DBNull.Value : TmphBuilder.Get(*columnIndex); ++columnIndex; } var row = table.NewRow(); row.ItemArray = values; table.Rows.Add(row); } } } }
/// <summary> /// DataTable拆包 /// </summary> /// <param name="value"></param> /// <returns></returns> public static unsafe DataTable Get(TmphDataTable value) { if (value == null) return null; var table = new DataTable(value._name); try { if (value._rowCount != 0) { fixed (byte* dataFixed = value._data.Data) { var TmphBuilder = new TmphDataReader(dataFixed, value._data.Strings, value._data.Bytes); value.Get(table, TmphBuilder); } } return table; } catch (Exception error) { table.Dispose(); TmphLog.Error.Add(error, null, false); } return null; }
/// <summary> /// DataTable拆包 /// </summary> /// <param name="TmphBuilder">数据对象拆包器</param> /// <returns></returns> public DataTable Get(TmphDataReader TmphBuilder) { var table = new DataTable(_name); if (_rowCount != 0) { try { Get(table, TmphBuilder); } catch (Exception error) { table.Dispose(); table = null; TmphLog.Error.Add(error, null, false); } } return table; }