我有一个DB Express TSimpleDataset连接到Firebird数据库。我刚刚添加了数千行数据到数据集,现在是时候调用ApplyUpdates了。TCustomClientDataset可以在批处理模式下应用更新吗?
不幸的是,这导致数千数据库命中,因为它试图单独INSERT
每行。这有点令人失望。我真正希望看到的是数据集生成单个事务,其中包含几千个INSERT
语句,并立即发送整个事件。如果必须的话,我可以自己设置它,但首先我想知道是否有任何内置到数据集或DBX框架的方法。
ClientDataSets,或者说,DataSetProviders只有在没有打开的事务时才会启动事务('.SqlConnection.BeginTransaction')。尽管我有点困惑,但我认为'ApplyUpdates'只能启动'one'交易。 – 2011-06-06 19:01:49
@Sertac:对此没有把握 - 我没有对它进行太多的研究 - 但我确实知道,如果我只是调用ApplyUpdates,它会逐个发送每个“INSERT”语句,这会增加大量的开销并严重降低了速度。我基本上试图在这里获得批量插入作业。 – 2011-06-06 19:09:05
好吧,与交易无关然后..据我可以追踪,最终,“DataSetProvider”的'CustomResolver'的'UpdateTree'循环通过'Delta'为每条记录生成一个语句。我看不出有什么办法.. – 2011-06-06 19:29:56