ADODB :: _ RecordsetPtr :: Open抛出异常,如查询超时在c ++中过期

时间:2014-07-01 10:57:33

标签: c++ sql adodb

这里我试图从我的c ++应用程序查询sql server 2008 r2的表。它包含21,54,514。但它会抛出“查询超时已过期”之类的异常。下面是我的代码库

ADODB::_ConnectionPtr           m_pDBConnection;
ADODB::_RecordsetPtr                m_pRS;

m_pDBConnection.CreateInstance("ADODB.Connection");
m_pRS.CreateInstance("ADODB.RecordSet");

m_pRS->Open(wstrSQL.c_str(), _variant_t((IDispatch *) m_pDBConnection, true),
        ADODB::adOpenStatic,
        ADODB::adLockReadOnly,
        ADODB::adCmdText);

当执行上述行时,它会抛出上述异常。

我知道这个问题,问题实际上是默认超时设置。实际上是15秒。

任何人都可以告诉如何在 ADODB :: _ RecordsetPtr 中重置或更改超时。我在谷歌搜索了很多,我们可以为 ADODB :: _ ConnectionPtr 重置超时,但不能为 ADODB :: _ RecordsetPtr 重置超时。对我来说这会有所不同。提前谢谢。

1 个答案:

答案 0 :(得分:2)

根据Coding Journey,您需要在命令的连接上设置CommandTimeout

// The recordset for the result
ADODB::_RecordsetPtr rs;
// Timeout on connection
m_pDBConnection->CommandTimeout = 60;
// Need to create command first, then configure it, then open RecordSet
ADODB::_CommandPtr cmd(__uuidof(ADODB::Command));
cmd->ActiveConnection = m_pDBConnection;
cmd->CommandText = wstrSQL.c_str();
cmd->CommandTimeout = 60;
rs->Open(cmd, vtMissing, ADODB::adOpenStatic, ADODB::adLockReadOnly, ADODB::adCmdText);
// Reset the timeout on the connection
m_pDBConnection->CommandTimeout = 15;