ADO日记:为什么_RecordsetPtr的RecordCount为-1

/*

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值