/*
下面的代码中 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__ );
}