呵呵,我以前回答过:用 ADOX (Microsoft® ActiveX® Data Objects Extensions for Data Definition Language and Security) 吧。ADOX 是对 ADO 的一个扩展,动态连接库为 MSADOX.DLL;随 MSDAC (Microsoft Data Access Components) 安装;最新的版本可到http://www.microsoft.com/data 取下载;VB 安装后,默认情况下 MDAC_TYP.EXE 拷贝到 X:\Program Files\Microsoft Visual Studio\VB98\Wizards\PDWizard\Redist 目录下。关于 ADOX 的参考资料,请看 msdn ADO Reference。

解决方案 »

  1.   

    CString str;
    CoInitialize(NULL);
    _RecordsetPtr pRecordset;
    _ConnectionPtr pConn;
    _ParameterPtr pParam;
    ParametersPtr pParameters;HRESULT hr;
    hr = pConn.CreateInstance(__uuidof(Connection));
    pConn->Open("DSN=test1;UID=sa;PWD=pwd;","sa","");
    if (FAILED(hr)) 
    {
    AfxMessageBox("Cann't create connection object!");
    return false;
    }_CommandPtr pComm;
    hr = pComm.CreateInstance(__uuidof(Command));
    if (FAILED(hr)) 
    {
    AfxMessageBox("create command object failled!");
    return false;
    }pComm->ActiveConnection = pConn;
    pComm->CommandText = "test1";
    pComm->CommandType = adCmdStoredProc;
    pParam = pComm->CreateParameter(_bstr_t("thecol1"),adInteger,adParamInput,sizeof(_variant_t),3L);
    pParameters = pComm->Parameters;
    pParameters->Append(pParam);_variant_t theRows;
    _variant_t vNull;
    vNull.vt = VT_ERROR;
    vNull.scode = DISP_E_PARAMNOTFOUND;
    // pRecordset->CursorType = adOpenKeyset;
    pRecordset = pComm->Execute(&theRows,&vNull,adCmdStoredProc);//      pRecordset->MoveFirst();
    while(!pRecordset->ADOEOF)
    {
    int theid;
    _variant_t vTemp;
    theid = pRecordset->Fields->Item["col1"]->Value.intVal;
    vTemp = pRecordset->Fields->Item["col2"]->Value;
    str = vTemp.bstrVal;
    pRecordset->MoveNext();
    }
    return true;
    此段代码可以正常执行,检索的记录集有四条记录,但是如果在while语句前用了MoveFirst(),程序在执行MoveFirst()语句时出现 Runtime error!。我怀疑是游标不支持,于是又在前面加上  pRecordset->CursorType = adOpenKeyset; 但是程序执行该语句时也不行,同样出现 Runtime error!请教各位大侠,这到底怎么了?怎样用才正确?