使用 C++ 将多个记录添加到 ADO 记录集的最快方法
Fastest way to add multiple records to ADO recordset using C++
我们有一个数据模型,支持托管在多个服务器上的单表数据库。但是,我们偶尔需要编译来自多个表的数据,以便在经典 ASP 页上显示。这是在 C++ 中的 COM 对象中完成的。我们使用 OleDb 从 SQL Server 收集数据,OleDb 逻辑将数据直接写入C++结构中。然后,我们遍历结构数组,将数据添加到 SafeArray,然后将这些数组添加到记录集中。将数据添加到记录集的逻辑大致如下所示(省略初始化和错误处理逻辑):
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和更新的调用,逻辑就会苍蝇。所以问题在于如何将数据添加到记录集中。任何建议或建议非常感谢。提前非常感谢。
我已经很久
没有对 ADO 数据库连接进行编码了,但是如果我没记错的话,您需要将锁定更改为 adLockBatchOpt,然后进行批量更新。这样要快得多。
这可能会对您有所帮助
如果我没记错的话,它仍然很慢。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 有没有更准确的方法来记录C++时间?
- c++ - 将大文件记录处理到 cpp 容器的最有效方法
- 是否有记录在案的方法可以在现有 std::exponential_distribution 对象上重置 lambda 参
- 调用静态记录器的格式日志方法
- 有没有一种简单的方法来计算库中记录的函数
- 试图找到一种在OpenCV / BOOST中记录图形数据的方法
- 提供记录回调的最佳方法是什么?
- 使用 Doxygen 或类似方法记录枚举标志
- 执行调试日志记录的更好方法
- 使用 C++ 将多个记录添加到 ADO 记录集的最快方法
- 在C 中记录用户的最佳方法
- 这是记录static_cast的惯用方法
- 在 C++11 应用程序中进行错误日志记录的优雅方法
- 如何在C++的单类方法中获取SQLite记录
- 记录极少量数据的最有效方法是什么
- Sphinx:记录枚举的正确方法
- 以C++记录经过时间的正确方法
- c++代码访问UniVerse数据库记录的一种方法