【发布时间】:2011-06-06 17:42:14
【问题描述】:
我有一个连接到 Firebird 数据库的 DB Express TSimpleDataset。我刚刚向数据集添加了数千行数据,现在该调用 ApplyUpdates。
不幸的是,这会导致数千次数据库命中,因为它会尝试分别INSERT 每一行。这有点令人失望。我真正希望看到的是数据集生成一个包含数千个INSERT 语句的单个事务,并立即发送整个事务。如果必须,我可以自己设置,但首先我想知道数据集或 DBX 框架中是否有任何内置方法。
【问题讨论】:
-
ClientDataSets,或者更确切地说,DataSetProviders 仅在没有打开的事务时才开始事务 (
.SqlConnection.BeginTransaction)。不过我有点困惑,我认为“ApplyUpdates”只启动了“一个”交易。 -
@Sertac: 不确定——我没有仔细研究过——但我知道如果我只是调用 ApplyUpdates,它最终会发送每个
INSERT声明单独,这会增加大量开销并严重减慢速度。我基本上是想在这里获得批量插入工作。 -
好的,那么与事务无关..据我所知,最终,“DataSetProvider”的“CustomResolver”的“UpdateTree”循环通过“Delta”生成语句每条记录。我看不出有什么出路..