Ejemplo n.º 1
0
        /// <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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }