解决方案 »

  1.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=7839
      

  2.   

    看看数据库版的FAQ这样的例子很多
      

  3.   

    _CommandPtr pCmd;
    HRESULT hr = pCmd.CreateInstance(__uuidof(Command));
    if (FAILED(hr)) 
    {
    ASSERT(FALSE);
    return NULL;
    } pCmd->PutRefActiveConnection(AfxGetDBConnection());//设置数据库连接
    if (FAILED(hr)) 
    {
    ASSERT(FALSE);
    return NULL;
    } _ParameterPtr pPar = pCmd->CreateParameter(_bstr_t(""), 
    adBinary, adParamInput, sizeof(GUID));//创建参数 ParametersPtr pParams = pCmd->GetParameters();//得到命令的参数对象指针
    hr = pParams->Append(pPar);//加入参数
    if (FAILED(hr)) 
    {
    ASSERT(FALSE);
    return NULL;
    } hr = pCmd->put_CommandText(_bstr_t("mmas98.GetUserACL"));//存储过程名
    if (FAILED(hr)) 
    {
    ASSERT(FALSE);
    return NULL;
    } _variant_t vaUserID;
    GUID2Variant(userID, vaUserID);
    hr = pPar->put_Value(vaUserID);//设置参数值 if (FAILED(hr))
    {
    ASSERT(FALSE);
    return NULL;
    } int groupID;
    OPERATIONID operID;
    CUserACL* pUserACL = new CUserACL; try
    {
    // Executes the stored procedure 'GetUserACL'
    _RecordsetPtr pRecordset = pCmd->Execute(&vtEmpty, &vtEmpty2, adCmdStoredProc);//adCmdStoredProc表示命令是存储过程
    if (pRecordset->EOF == VARIANT_TRUE)
    return NULL;
      

  4.   

    你的问题不太好回答。
    ADO是对OLD DB 的一种封装。它的使用很灵活。
    关于你提到的执行一个存储过程就可以使用很多种方法。
    我给出一种示例吧:// 定义ADO连接、命令、记录集变量指针
    _ConnectionPtr m_pConnection;
    _CommandPtr m_pCommand;
    _RecordsetPtr m_pRecordset;// 初始化COM,创建ADO连接等操作
    AfxOleInit();
    try
    {
    m_pConnection.CreateInstance(__uuidof(Connection));
    //举例:数据源名为Demo.mdb,用户名为user,密码为111
    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","user","111",adModeUnknown);
    }
    catch(_com_error *e)
    {
    AfxMessageBox(e->ErrorMessage());
    }// 使用ADO创建数据库记录集
    m_pRecordset.CreateInstance(__uuidof(Recordset));// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
    // 因为它有时会经常出现一些想不到的错误。try
    {
    m_pRecordset->Open("Exec Proc_Select_Demo",            // 其中Proc_Select_Demo为存储过程 ,也可以执行写SQL语句
    m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);
    }
    catch(_com_error *e)
    {
    AfxMessageBox(e->ErrorMessage());
    }// 关闭记录集
    m_pRecordset->Close();
    m_pRecordset = NULL;多看看MSDN上的例子吧。那里的介绍很全面。