我们有一个数据模型,支持在多个服务器上托管的单个表数据库。但是,我们偶尔需要从多个表中编译数据以在经典ASP页面上显示。这是在C ++中的COM对象中完成的。我们使用OleDb从SQL Server收集数据,OleDb逻辑将数据直接写入C ++结构。然后我们遍历struct数组,将数据添加到SafeArrays,然后将它们添加到记录集。将数据添加到记录集的逻辑大致如下所示(省略了初始化和错误处理逻辑):
SAFEARRAY* fields; // Initialised to integer array 0 -> max fields
SAFEARRAY* values;
VARIANT* arraydata;
... // initialisation logic
SafeArrayAccessData(values, reinterpret_cast<void**>(&arrayData));
for(unsigned int i = 0; i < numDataValues1; ++i)
{
// Add data
arraydata[0].intVal = data[i].someValue;
... // etc.
for(unsigned int j = 0; j < numDataValues2; ++j)
{
arraydata[21].intVal = data2[j].someValue;
... // etc.
_recordset->raw_AddNew(fields, values);
_recordset->Update();
}
}
然而它相对较慢。可能需要一秒钟才能添加1000行数据,这在我们的环境中太长了。如果我注释掉对raw_AddNew的调用并更新逻辑苍蝇。所以问题在于我如何将数据添加到记录集。任何建议或建议非常感谢。非常感谢。
答案 0 :(得分:1)
我编写ADO数据库连接已经很长时间了,但是如果我没记错的话,你需要将锁定更改为adLockBatchOptimistic,然后进行批量更新。它的速度要快得多。
如果我没记错的话,它仍然很慢。