ADO MarshalOptions与序列化

MarshalOptions看说明,取值moMarshalModifiedOnly时,在序列化接口时只会传回异动的资料到中间层。

但是要注意以下几点:

(1)、要在TADODataSet Open后,设置moMarshalModifiedOnly才有效,Open前,如设计时,不会有效,可能算一个Bug,我测试Delphi15还是这样。

在中间层用接口来保存数据时,可以减少资料量。如:

procedure TADO2.SaveData(const ADataSet: _Recordset);
var
  ADOC:TADOConnection;
  ADOD:TADODataSet;
begin
  ADOC:=TADOConnection.Create(nil);
  ADOD:=TADODataSet.Create(nil);
  try
    ADOC.LoginPrompt:=false;
    ADOC.ConnectionString:='xxxxxxxx';
    ADOC.Open();
    ADOD.LockType:=ltBatchOptimistic;
    ADOD.CommandText:='select * from csUOMsSystems';
    ADOD.Recordset:=ADataSet;
    //顺序很重要,后设定Connection,否则保存不会成功
    ADOD.Connection:=ADOC;
    ADOD.SaveToFile('D:\ADO.xml',pfXML);
    ADOD.UpdateBatch();
  finally
    ADOD.Free;
    ADOC.Free;
  end;
end;


(2)、moMarshalModifiedOnly对SaveToFile无效,即,SaveToFile是全部的资料。

这点比较讨厌,因为我们不能按自己的需要来序列化Delta,如,序列化成Byte Array,通过TCP传递到中间层。可惜ADO2.8后不再维护了。

 

如果用这种方式实现中间层更新资料,另一个比较纠结的问题是,DBMS产生的Auto Inc资料,default资料如何带回到客户端的DataSet中,否则,难道要Reopen吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火星牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值