使用C ++将多条记录添加到ADO记录集的最快方法

时间:2012-11-24 02:30:08

标签: c++ asp-classic oledb ado

我们有一个数据模型,支持在多个服务器上托管的单个表数据库。但是,我们偶尔需要从多个表中编译数据以在经典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的调用并更新逻辑苍蝇。所以问题在于我如何将数据添加到记录集。任何建议或建议非常感谢。非常感谢。

1 个答案:

答案 0 :(得分:1)

我编写ADO数据库连接已经很长时间了,但是如果我没记错的话,你需要将锁定更改为adLockBatchOptimistic,然后进行批量更新。它的速度要快得多。

This might help you

如果我没记错的话,它仍然很慢。