加速ADO的记录集BOF调用

时间:2013-09-23 23:54:31

标签: c++ windows ado

我在Windows上有一些C ++代码,它使用普通的旧ADO(不是ADO.NET)从一堆SQL Server数据库中检索数据。该代码使用仅向前游标来允许使用消防软件游标,以便在生成大型Recordset的查询上获得最大数据吞吐量。

处理结果的代码如下所示,使用#import生成的ADO 2.7包装器:

ADODB::_RecordsetPtr records("ADODB.Recordset");

records->Open(cmd, _variant_t(static_cast<IDispatch *>(m_DBConnection)), ADODB::adOpenForwardOnly, ADODB::adLockReadOnly, ADODB::adCmdText);

if (!(records->BOF && records->EOF))
{
  ... Loop over the recordset and extract data from each record ...
}

分析表明,上述循环的近40%用于调用BOF,这对整个数据库代码的读取性能产生了巨大影响。因为代码使用仅向前游标,所以无法检查RecordCount属性,因为在使用仅向前游标时它始终为-1。

还有另一种方法可以检查没有使用BOF / EOF检查的空Recordset,还是加快检查速度的方法?

我现在能想到的另一个选择是使用其他一种游标类型,并检查它将如何影响数据吞吐量。

0 个答案:

没有答案