/// <summary> /// 写入数据表信息 /// </summary> /// <param name="dt"></param> /// <param name="bw"></param> private static void WriteDataTable(DataTable dt, BinaryWriter bw) { MemTypeManager.WriteString(bw, dt.TableName); //写入列数 MemTypeManager.WriteInt(bw, dt.Columns.Count); List <MemTypeItem> lstItem = new List <MemTypeItem>(dt.Columns.Count);//列的信息 MemTypeItem item = null; //写入列信息 foreach (DataColumn col in dt.Columns) { MemTypeManager.WriteString(bw, col.ColumnName);//列名 //列类型ID item = MemTypeManager.GetTypeInfo(col.DataType); if (item != null) { MemTypeManager.WriteInt(bw, item.TypeID); lstItem.Add(item); } else { lstItem.Add(item); } } //行数 MemTypeManager.WriteInt(bw, dt.Rows.Count); //写入数据 foreach (DataRow row in dt.Rows) { for (int i = 0; i < lstItem.Count; i++) { if (row.IsNull(i)) { lstItem[i].WriterHandle(bw, null); continue; } object value = row[i]; if (lstItem[i] == null) { continue; } lstItem[i].WriterHandle(bw, value); } } }
private static DataTable ReadDataTable(BinaryReader br) { DataTable dt = new DataTable(); dt.TableName = MemTypeManager.ReadString(br) as string; int columnCount = (int)MemTypeManager.ReadInt(br);//列数 string name = null; int typeCode = 0; List <MemTypeItem> lstItem = new List <MemTypeItem>(columnCount);//列的信息 for (int i = 0; i < columnCount; i++) { name = MemTypeManager.ReadString(br) as string; typeCode = (int)MemTypeManager.ReadInt(br); MemTypeItem item = MemTypeManager.GetTypeByID(typeCode); if (item != null) { dt.Columns.Add(name, item.ItemType); lstItem.Add(item); } } int rows = (int)MemTypeManager.ReadInt(br); dt.BeginLoadData(); for (int i = 0; i < rows; i++) { DataRow dr = dt.NewRow(); for (int k = 0; k < lstItem.Count; k++) { MemTypeItem colItem = lstItem[k]; object value = colItem.ReadHandle(br); if (value != null) { dr[k] = value; } } dt.Rows.Add(dr); } dt.EndLoadData(); return(dt); }