ADO日记:为什么_RecordsetPtr的RecordCount为-1
2009-03-03 09:26
489 查看
/*
下面的代码中 code block1 中RecordCount的值为-1,而code block2的值正常;
*/
_variant_t vsSQL = "select name from sysobjects where xtype='u'";
_RecordsetPtr pRs = NULL;
try
{
if ( FAILED( pRs.CreateInstance( __uuidof( Recordset ) ) ) )
CatchAdoError( __FILE__, __LINE__ );
else
{
if ( FAILED( pRs->Open( vsSQL, m_pView->GetDbConnection().GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText ) ) )
{
CatchAdoError( __FILE__, __LINE__ );
}
else
{
VARIANT vIdx;
V_I4( &vIdx ) = 0;
V_VT( &vIdx ) = VT_I4;
for ( long i = 0 ; i < pRs->RecordCount; i++ )
{
VARIANT vFdValue = pRs->Fields->GetItem( vIdx )->Value;
_bstr_t s = "NULL";
if ( vFdValue.vt != VT_NULL )
s = vFdValue.bstrVal;
m_TableListCtrl.InsertItem(i,(char*)s);
pRs->MoveNext();
}
}
pRs->Close();
//------code block 1
vsSQL = "select * from Table_test";
pRs->Open( vsSQL, m_pView->GetDbConnection().GetInterfacePtr(),
adOpenStatic, adLockOptimistic, adCmdText );
TRACE("ddd1 = %d /n",pRs->RecordCount);
pRs->Close();
//----end code block 1
//------code block 2
vsSQL = "select * from Table_test";
pRs->Open( vsSQL, m_pView->GetDbConnection().GetInterfacePtr(),
adOpenKeyset, adLockReadOnly, adCmdText );
TRACE("ddd2 = %d /n",pRs->RecordCount);
pRs->Close();
//----end code block 2
}
}
catch ( _com_error& e )
{
m_pView->CatchComError( e, __FILE__, __LINE__ );
}
下面的代码中 code block1 中RecordCount的值为-1,而code block2的值正常;
*/
_variant_t vsSQL = "select name from sysobjects where xtype='u'";
_RecordsetPtr pRs = NULL;
try
{
if ( FAILED( pRs.CreateInstance( __uuidof( Recordset ) ) ) )
CatchAdoError( __FILE__, __LINE__ );
else
{
if ( FAILED( pRs->Open( vsSQL, m_pView->GetDbConnection().GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText ) ) )
{
CatchAdoError( __FILE__, __LINE__ );
}
else
{
VARIANT vIdx;
V_I4( &vIdx ) = 0;
V_VT( &vIdx ) = VT_I4;
for ( long i = 0 ; i < pRs->RecordCount; i++ )
{
VARIANT vFdValue = pRs->Fields->GetItem( vIdx )->Value;
_bstr_t s = "NULL";
if ( vFdValue.vt != VT_NULL )
s = vFdValue.bstrVal;
m_TableListCtrl.InsertItem(i,(char*)s);
pRs->MoveNext();
}
}
pRs->Close();
//------code block 1
vsSQL = "select * from Table_test";
pRs->Open( vsSQL, m_pView->GetDbConnection().GetInterfacePtr(),
adOpenStatic, adLockOptimistic, adCmdText );
TRACE("ddd1 = %d /n",pRs->RecordCount);
pRs->Close();
//----end code block 1
//------code block 2
vsSQL = "select * from Table_test";
pRs->Open( vsSQL, m_pView->GetDbConnection().GetInterfacePtr(),
adOpenKeyset, adLockReadOnly, adCmdText );
TRACE("ddd2 = %d /n",pRs->RecordCount);
pRs->Close();
//----end code block 2
}
}
catch ( _com_error& e )
{
m_pView->CatchComError( e, __FILE__, __LINE__ );
}
相关文章推荐
- 为什么_RecordsetPtr的RecordCount属性总是返回-1
- ADO的RECORDSET的RECORDCOUNT属性总是为-1
- _RecordsetPtr::RecordCount返回值为-1的问题
- ADO的RECORDSET的RECORDCOUNT属性总是为-1
- ADO中_RecordsetPtr的使用
- VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法
- 存储过程获取RecordSet的RecordCount为-1
- ado _RecordsetPtr open 最可能的异常: Microsoft C++ exception
- VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法
- 为什么delphi中query.recordcount返回值总是-1
- VC++下使用ADO操作数据库_ConnectionPtr、_RecordsetPtr和_CommandPtr(转)
- ADO Recordset对象的RecordCount属性总是-1?
- ADO记录集_RecordsetPtr访问SQL数据库
- ado 实现对db2数据库的数据插入 _RecordsetPtr
- VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法
- VC++下使用ADO操作数据库_ConnectionPtr、_RecordsetPtr和_CommandPtr
- VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法
- VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法
- ADO 笔记 ——关于RecordCount
- MFC用 ADO连接数据库,get_RecordCount总是返回-1解决办法