C++;和ADODB:Com错误0x800a0e78 我有一个C++数据库,它使用ADODB调用MSSQL数据库中的存储过程。在开发数据库上一切正常。但在测试数据库上,我得到Com错误0x800a0e78:如果对象关闭,则不允许使用此选项

C++;和ADODB:Com错误0x800a0e78 我有一个C++数据库,它使用ADODB调用MSSQL数据库中的存储过程。在开发数据库上一切正常。但在测试数据库上,我得到Com错误0x800a0e78:如果对象关闭,则不允许使用此选项,c++,sql,visual-c++,com,C++,Sql,Visual C++,Com,代码看起来像 ADODB::_CommandPtr cmd = NULL; ADODB::_RecordsetPtr rs = NULL; CHECKHR(cmd.CreateInstance( __uuidof( ADODB::Command) )); cmd->ActiveConnection = m_connexion; cmd->CommandText = "my_stored_procedure"; cmd->CommandType = ADODB::adCmdSt

代码看起来像

ADODB::_CommandPtr cmd = NULL;
ADODB::_RecordsetPtr rs = NULL;

CHECKHR(cmd.CreateInstance( __uuidof( ADODB::Command) ));
cmd->ActiveConnection = m_connexion;
cmd->CommandText = "my_stored_procedure";
cmd->CommandType = ADODB::adCmdStoredProc;

CHECKHR(cmd->Parameters->Refresh());

//input param
cmd->Parameters->GetItem(paramIndex)->put_Value(paramValue);

// output param
cmd->Parameters->GetItem(paramIndex)->PutDirection(ADODB::adParamOutput);

rs = cmd->Execute( NULL, NULL, ADODB::adCmdStoredProc);

while(! rs->ADO_EOF ) { ...
rs->ADO_EOF是在使用测试数据库时程序崩溃的地方

注意:这两个数据库中的存储过程相同,并且返回相同的数据。 还有一个流调用另一个SP。它与测试数据库配合得很好。该问题仅出现在该特定SP上

我倾向于认为这不是一个代码问题,因为它与开发数据库一起工作。但我可以始终如一地用测试数据库重现这个问题

请建议我为解决此问题应采取的下一步行动

更新

由于某些奇迹,C++异常在1天后消失了。但是它是如此的缓慢以至于执行几乎总是超时。我不知道如何为这种行为辩护

更新:2013-07-18

经过这么长时间,错误又出现了。这一次使用相同SP的开发数据库

[Com error 0x800a0e78 : Operation is not allowed when the object is closed.
在同一条线上

 while(! rs->ADO_EOF ) {

在rs中,我可以看到一个指向ADODB记录集对象的内存地址。但是rs->ADO_EOF正在生成所述错误

如果在while行中放置断点,rs的计算结果是什么?还是空的吗?它是有效的记录集对象吗?对象是否充满数据?@Traveling Tech Guy它不是空的。似乎有data@Preet我该如何解决这个问题?@preet,或者更确切地说,我该如何发现这是开始的原因?