原来的方式是系统版本和数据版本一一对应的.不可以跨版本接收数据.
现在想修改一下.没有太好的头绪,所以请教一下,看看大家有什么想法?
步骤1:系统(1.0版本)将数据库(1.0版本)中的若干数据组成DataSet,序列化为文件导出"文件A";
步骤2:系统升级到2.0,数据库升级到2.0.运行系统(2.0版本),选择"文件A"希望导入.分析:
拥有DataSet(1.0版本),脚本(1.0版本到2.0版本).
需要DataSet(2.0版本).不多说了,先谢谢看完的朋友.

解决方案 »

  1.   

    看情况吧
    1.最主要的应该是数据库版本的改动,如果从1.0到2.0的改动都是新加(删除)一些表,新加(删除)一些列(可以为NULL),或者是列的取值范围扩大(比如从int变成bigint),那应该问题不大
    2.看你怎么序列化的,如果是写成XML,那就更简单了如果满足条件1,那么就可以:
    a. DataSet ds = 用2.0的schema初始化
    b. ds.LoadXML(fileA),我不太清楚别的序列化格式是不是也有类似的方法,如果没有的话,可以考虑先把fileA反序列化成ds1.0版本再WriteXML好了。。如果不满足条件1,比如新加了一些不能为NULL的列,或者是加了一些1.0数据会出问题的约束之类的,你可能需要先定义一个和2.0类似的schema,但是去掉会出问题的约束,把数据load进来之后再想办法去解决这些问题,都ok了再倒入到2.0里面最最差的情况,那就是这两个根本不兼容,1.0序列化的XML文件可能要完全写个方法去parse成2.0的row,一条一条加到2.0里面
      

  2.   

    其实将这个问题提出来就是想一种通用的办法,毕竟在每个模块处理,每个版本处理是不现实的。
    因为数据的升级我们是无法控制的,但是肯定是做到同时考虑到数据处理的,例如更新了某列,将其长度修改或非空,脚本是会同时处理其数据的。
    这种情况下,应该算是复杂型的情况了。因此,直接读取xml文件是有局限性的。
    我的设想是,将每个版本的数据升级脚本记录到数据库中,导出的文件也记录下版本信息。通过处理将文件数据进行数据升级。
    最开始我的想法很幼稚,每次导入文件的时候如果需要数据升级,就构造一系列的表副本,通过表副本的方式进行脚本升级后再进行数据融合。但是这样越想越复杂,所以看看其他系统有没有类似的情况考虑,提供一个已应用的方式。