4

我有一个连接到 Firebird 数据库的 DB Express TSimpleDataset。我刚刚向数据集添加了数千行数据,现在该调用 ApplyUpdates。

不幸的是,这会导致数千个数据库命中,因为它会INSERT单独尝试每一行。这有点令人失望。我真正想看到的是数据集生成一个包含几千条INSERT语句的事务,并一次发送整个事务。如果必须,我可以自己设置它,但首先我想知道数据集或 DBX 框架中是否有任何内置方法。

4

1 回答 1

1

不知道 TSimpleDataset 是否可能(从未使用过),但如果您使用 TClientDataset + TDatasetProvider + <将您的数据库数据集放在这里>,您肯定可以。您可以编写一个BeforeUpdateRecord来自己处理应用过程。基本上,它允许您绕过标准应用过程,访问数据集增量并更改记录,然后使用您自己的代码和组件将更改应用到数据库。例如,您可以调用存储过程来修改数据,等等。

但是,事务与所谓的“数组 DML”、“批量插入”等是有区别的。即使您使用单个事务(并且“应用”AFAIK 发生在单个事务中),在事务中您可能仍需要发送“n”个 INSERT。一些数据库支持发送带有要插入的参数数组的单个 INSERT(或更新、删除)的方式,从而减少要使用的单个语句的数量 - 但这可能是特定于数据库的,AFAIK dbExpress/Datasnap 不支持它 - 您仍然可以使用 BeforeUpdateRecord 事件来利用特定的数据库功能。

于 2011-06-07T08:36:30.150 回答