CADORecordset rs = CADORecordset( &g_ADODb );
rs.m_pCmd->ActiveConnection=g_ADODb.m_pConnection;
rs.m_pCmd->CommandText="test";  
rs.m_pCmd->CommandType=adCmdStoredProc;
_RecordsetPtr pRecSet = rs.m_pCmd->Execute(NULL, NULL, adCmdStoredProc);
try
{
    int nRow = pRecSet->Fields->GetCount(); //这里能正确获取到列数
        nRow = pRecSet->GetRecordCount();    // 这里获取到的是-1
pRecSet->Close();
}
catch (_com_error& e)
{
           _bstr_t source = e.Source();
   _bstr_t des = e.Description();
   return -1;
}不太熟悉ADO。大家帮忙看看哪里有问题。不能取到结果集,之间在数据库上执行,有结果的。程序里调用取不到

解决方案 »

  1.   

    执行一个带三个参数的存储过程,一个输入参数,两个输出参数。_ConnectionPtr m_pConnection;
    _CommandPtr m_pCommand;
    .cpp中在函数中执行
    //建立ado连接
    HRESULT hr;
    hr=m_pConnection.CreateInstance(__uuidof(Connection));
    try
    {
    if(SUCCEEDED(hr))
    {
    hr=m_pConnection->Open(_bstr_t(L"Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Viper;Data Source=Viper"),_bstr_t (L"sa"),_bstr_t (L""),adModeUnknown);
    }
    }
    catch(_com_error & err)
    {
    AfxMessageBox(err.Description(),MB_OK,0);
    AfxMessageBox(err.ErrorMessage(),MB_OK,0);
    AfxMessageBox("无法连接SQL SERVER 服务器,程序将退出。请检查网络设备",MB_OK,0);
    exit(0);
    }//执行储存过程
    CString cvar1,cvar2;
    int cvar3;
    cvar1="ddd";
    cvar2="";
    cvar3=0;
    try
    {
    m_pCommand.CreateInstance(__uuidof(Command));
    m_pCommand->ActiveConnection=app->m_pConnection;
    m_pCommand->CommandType=adCmdStoredProc; //指定Command对象为存储过程类型
    m_pCommand->CommandText=_bstr_t("pr_zs_dzdy"); //指定存储过程名_variant_t vvar1,vvar2,vvar3;
    vvar1=_variant_t(_bstr_t(cvar1));
    vvar2=_variant_t(_bstr_t(cvar2));
    vvar3=_variant_t(cvar3);
    _ParameterPtr mp_var1,mp_var2,mp_var3; //创建参数
    mp_var1.CreateInstance(__uuidof(Parameter));
    mp_var2.CreateInstance(__uuidof(Parameter));
    mp_var3.CreateInstance(__uuidof(Parameter));mp_var1=m_pCommand->CreateParameter //转换变量为参数
    (
    _bstr_t("var1"),
    adVarChar,
    adParamInput, //类型为输入类型
    3,
    vvar1
    );
    m_pCommand->Parameters->Append(mp_var1); //附加上参数mp_var2=m_pCommand->CreateParameter
    (
    _bstr_t("var2"),
    adVarChar,
    adParamOutput, //设定为返回类型
    3,
    vvar2
    );
    m_pCommand->Parameters->Append(mp_var2); mp_var3=m_pCommand->CreateParameter
    (
    _bstr_t("var3"),
    adIntger,
    adParamOutput, //设定为返回类型
    9,
    vvar3
    );
    m_pCommand->Parameters->Append(mp_var3); 
    _variant_t vNull;
    vNull.vt=VT_ERROR;
    vNull.scode=DISP_E_PARAMNOTFOUND;
    m_pCommand->Execute(&vNull,&vNull,adCmdStoredProc);
    cvar2=mp_var2->Value.bstrVal; //从返回的变量里面取值
    cvar3=mp_var3->Value; //从返回的变量里面取值
    }
    catch(_com_error &error)
    {
    MessageBox(error.ErrorMessage(),"ADO错误!");
    MessageBox(error.Description(),"ADO错误!");
    }
      

  2.   

    看下这个例子,如果是SQLSERVER 需要在存储过程加一句SET NOCOUNT ON;
      

  3.   

    nRow = pRecSet->GetRecordCount();//这里根本就取不到,但是可以直接使用里面的内容