C#学习纪要(3):7月11日

7月11日 星期六 天气,下了一场意外的雨

今天还要加班,所以继续写咯。今天的目标是写一个备份类出来。

备份类的思路先整理一下:

1.从数据库中获取所有数据,而且要包括数据库的元数据信息,即是数据表名,数据表的各个字段。以待在恢复的时候重建数据库。这一部分要用LINQ来写。

14:10----对于这一点,有一个问题,有一些备份操作是部分备份,即只导出符合条件的那一部分数据表的数据,如果用重建的方法来重建数据库,就会导致原有数据丢失的情况。解决方法是开一个接口,让用户决定是否重新数据库。如果不重建,那么要做的就是要在不改动表结构的情况下进行数据的更新。

14:48------使用LINQ将实体类导出,然后序列化到二进制文件,注意Entity的可视化编辑视图中要修改属性SerializationMode,改为Undirectional。这里有一个问题是反序列化的时候,只能从文件中反序列化出一个Object。(我记得Java的ObjectOutputStream/OjectInputStream是什么顺序写,就可以什么顺序读的。。.net啊,.net啊)好吧,解决方法可以这样,创建一个硕大无比Arraylist容器,然后啥都往里装吧。

14:58-------先停一下这个,做点团队协作的工作,写注释。。。。

15:41--------又遇到一个问题了,如果序列化一个硕大无比的Arraylist,就无法与写入进度条挂钩了。

16:41--------解决方法:一个一个写,某写好一个都发一个完成信息。至于怎么一个一个写呢?用bytes数组来写,先写一个长度,然后写入整个对象。读的时候写读长度,然后根据长度对Bytes数组

17:21--------刚才做的是找到一种方法将对象转换成byte[]。网上找了一下,看来只有序列化这条路。如果是一般定义的对象,那就已经找到方法了。用一个MemoryStream,还有一个BinaryFormatter来实现序列化,写到内存流里面,然后用内存流的ToArray方法来转换成byte[]。

However,项目用的是LINQ,所有在数据库读出的实体类都是在Entity里面定义的,也就是说必须用LINQ本身的定义的序列化方法,有一个类DataContractSerializer负责做这个事情。然而问题又来了,这个类在VS中居然没有找到。。。。

真是奇怪了。还有一个方法是另建一个cs文件,在里面添加partial类定义,为每一个需要序列化的类添加[Serializable]的标签。shit.

终于找到原因了!!原来电脑里面的.NET类库是3.0版本的,而DataContractSerializer需要3.5版本!

----------7月13日 10:59 终于彻底解决上面这个问题了。呵呵,只怪自己对.net太不熟悉了。其实版本用的的确是3.5版的,但是需要在项目添加引用才能使用System.Runtime.Serialization命名空间里面的东西。shit!

2.将这些数据写入到二进制文件中,需要利用.net文件操作部分的内容。

3.在备份类中还需要有 完成百分比事件 , 以使得备份过程可以与ProgressBar关联起来。

好吧,动手做吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值