_ConnectionPtr conn(__uuidof(Connection);
_CommandPtr cmdProc(__uuidof(Command));
_ParameterPtr prmIn;
....
使用commandptr类调用存储过程。
cmdProc->CommandText=L"存储过程名;
cmdProc->CommandType=adCmdStoredProc;
//设置存储过程参数
prmIn=cmdProc->CreateParameter(L"输入参数1",adChar,adParamInput,4);
prmIn->Value=参数值;
cmdProc->Parameters->Append(prmIn);
//执行存储过程
cmdProc->Execute(NULL,NULL,adCmdStoredProc);

解决方案 »

  1.   

    不好意思,懒,你自己慢慢看吧#include "stdafx.h"#include <stdio.h>
    #include <tchar.h>
    #include "myDB.h"CMyDB::CMyDB()         
    {
    m_pConnection = NULL;
    }CMyDB::~CMyDB()         
    {

    }HRESULT CMyDB::InitDB()
    {
    if(FAILED(::CoInitialize(NULL)))
            return E_FAIL;

    return S_OK;
    }
    void CMyDB::PrintProviderError(_ConnectionPtr pConnection)
    {
        // Print Provider Errors from Connection object.
        // pErr is a record object in the Connection's Error collection.
        ErrorPtr    pErr  = NULL;    if( (pConnection->Errors->Count) > 0)
        {
            long nCount = pConnection->Errors->Count;
            // Collection ranges from 0 to nCount -1.
            for(long i = 0;i < nCount;i++)
            {
                pErr = pConnection->Errors->GetItem(i);
                _stprintf( m_pstr,"\t Error number: %x\t%s", pErr->Number,
                    pErr->Description);
    ::MessageBox( NULL, m_pstr, NULL, MB_OK );
            }
        }
    }void CMyDB::PrintComError(_com_error &e)
    {
       _bstr_t bstrSource(e.Source());
       _bstr_t bstrDescription(e.Description());    // Print COM errors. 
       //printf("Error\n");
       _stprintf(m_pstr, "\tCode = %08lx\n", e.Error());
       ::MessageBox( NULL, m_pstr, NULL, MB_OK );
       _stprintf(m_pstr, "\tCode meaning = %s\n", e.ErrorMessage());
       ::MessageBox( NULL, m_pstr, NULL, MB_OK );
       _stprintf(m_pstr, "\tSource = %s\n", (LPCSTR) bstrSource);
       ::MessageBox( NULL, m_pstr, NULL, MB_OK );
       _stprintf(m_pstr, "\tDescription = %s\n", (LPCSTR) bstrDescription);
       ::MessageBox( NULL, m_pstr, NULL, MB_OK );
    }
    _bstr_t CMyDB::GetState(int intState) 
    {
        _bstr_t strState; 
        switch(intState) 
        {
            case adStateClosed:
                strState = "adStateClosed";
                break;
            case adStateOpen:
                strState = "adStateOpen";
                break;
            default:
            ;
        }
        return strState;
    }HRESULT CMyDB::DeleteObjects()
    {
    if(m_pConnection)
    CloseDb();
    ::CoUninitialize(); return S_OK;
    }HRESULT CMyDB::OpenDb(TCHAR* pDir)
    {
    if(m_pConnection)
    CloseDb(); TCHAR pcn[MAX_PATH + 50] = "DBQ=";
    _tcscat(pcn,pDir);
    _tcscat(pcn,";DRIVER={Microsoft Access Driver (*.mdb)};");
    m_strCnn = pcn; 

    try
        {
            // Open connection.
            TESTHR(m_pConnection.CreateInstance(__uuidof(Connection)));
            m_pConnection->Open (m_strCnn, "", "", adConnectUnspecified);
        }    catch(_com_error &e)
        {
    CString str;
    str.Format("数据库操作错误\n错误代码:%08lx\n错误信息:", e.Error());
    str +=  e.Description();
    AfxMessageBox(str);
    ::PostMessage(0,  WM_QUIT, 0l, 0l );
    return E_FAIL;       
        }
    return S_OK;
    }HRESULT CMyDB::CloseDb()
    {
    if(m_pConnection->State == adStateOpen)
    m_pConnection->Close();
    return S_OK;
    }_RecordsetPtr CMyDB::ExecuteRs( _bstr_t strSql )

    _RecordsetPtr   pRst = NULL;
    try
        {        
    pRst = m_pConnection->Execute(strSql, NULL, adCmdText);
        }    catch(_com_error &e)
        {        
            PrintComError(e);
        }

    return pRst;
    }void CMyDB::Execute( _bstr_t strSql )

    try
        {
            m_pConnection->Execute(strSql, NULL,
    adCmdText | adExecuteNoRecords);
        }    catch(_com_error &e)
        {        
            PrintComError(e);
        }
    }
    _RecordsetPtr CMyDB::GetSort()
    {
    _RecordsetPtr   pRst = NULL;
    _bstr_t strSql("select distinct 分类 from 主表");
    pRst = ExecuteRs(strSql);
    return pRst;
    }_RecordsetPtr CMyDB::GetSpec( TCHAR* strSort )
    {
    _RecordsetPtr   pRst = NULL;
    TCHAR sql[100]="select distinct 规格 from 主表 where 分类 = '";
    _tcscat(sql,strSort);
    _tcscat(sql,"'");
    //_bstr_t strSql("select distinct 规格 from 主表 where 分类 = ");
    _bstr_t strSql = sql;
    pRst = ExecuteRs(strSql);
    return pRst;
    }_RecordsetPtr CMyDB::GetSeries( const TCHAR* strSort , TCHAR* strSpec )
    {
    _RecordsetPtr   pRst = NULL;
    TCHAR sql[100]="select distinct 系列 from 主表 where 分类 = '";
    _tcscat(sql,strSort);
    _tcscat(sql,"' and 规格 = '");
    _tcscat(sql,strSpec);
    _tcscat(sql,"'");
    _bstr_t strSql = sql;
    pRst = ExecuteRs(strSql);
    return pRst;
    }_RecordsetPtr CMyDB::GetTexture( const TCHAR* strSort , 
    const TCHAR* strSpec, const TCHAR* strSeries )  
    {
    _RecordsetPtr   pRst = NULL;
    TCHAR sql[150]="select 花色, 代号 from 主表 where 分类 = '";
    _tcscat(sql,strSort);
    _tcscat(sql,"' and 规格 = '");
    _tcscat(sql,strSpec);
    _tcscat(sql,"' and 系列 = '");
    _tcscat(sql,strSeries);
    _tcscat(sql,"'");
    _bstr_t strSql = sql;
    pRst = ExecuteRs(strSql);
    return pRst;
    }_RecordsetPtr CMyDB::GetById( const TCHAR* strId )  
    {
    _RecordsetPtr   pRst = NULL;
    TCHAR sql[150]="select * from 主表 where 代号 = '";
    _tcscat(sql,strId);
    _tcscat(sql,"'");
    _bstr_t strSql = sql;
    pRst = ExecuteRs(strSql);
    return pRst;
    }_RecordsetPtr CMyDB::GetAllSort()  
    {
    _RecordsetPtr   pRst = NULL;
    TCHAR sql[150]="select * from 分类";
    _bstr_t strSql = sql;
    pRst = ExecuteRs(strSql);
    return pRst;
    }_RecordsetPtr CMyDB::GetAllSeries()  
    {
    _RecordsetPtr   pRst = NULL;
    TCHAR sql[150]="select * from 系列";
    _bstr_t strSql = sql;
    pRst = ExecuteRs(strSql);
    return pRst;
    }void CMyDB::AddSort( LPCTSTR strSort )
    {
    TCHAR sql[150]="insert into 分类 ( 分类 ) values ( '";
    _tcscat(sql,strSort);
    _tcscat(sql,"')");
    _bstr_t strSql = sql;
    Execute(strSql);
    }void CMyDB::AddSeries( LPCTSTR strSeries )
    {
    TCHAR sql[150]="insert into 系列 ( 系列 ) values ( '";
    _tcscat(sql,strSeries);
    _tcscat(sql,"')");
    _bstr_t strSql = sql;
    Execute(strSql);
    }void CMyDB::AddRecord( LPCTSTR strSort, LPCTSTR strSeries,
       LPCTSTR strSpec, LPCTSTR strId,
       LPCTSTR strMat,  LPCTSTR strTexture,
       LPCTSTR strPrice,LPCTSTR strMemo,
       LPCTSTR strUnit )
    {
    TCHAR sql[2000]="insert into 主表 ( 分类, 系列, 规格, 代号, 材质, 花色, 价格, 说明, 单位) values ( '";
    //AfxMessageBox("begin");
    _tcscat(sql,strSort);
    _tcscat(sql,"', '");
    _tcscat(sql,strSeries);
    _tcscat(sql,"', '");
    _tcscat(sql,strSpec);
    _tcscat(sql,"', '");
    _tcscat(sql,strId);
    _tcscat(sql,"', '");
    _tcscat(sql,strMat);
    _tcscat(sql,"', '");
    _tcscat(sql,strTexture);
    _tcscat(sql,"', '");
    _tcscat(sql,strPrice);
    _tcscat(sql,"', '");
    _tcscat(sql,strMemo);
    _tcscat(sql,"', '");
    _tcscat(sql,strUnit);
    _tcscat(sql,"')");
    //AfxMessageBox("begin2");
    _bstr_t strSql = sql;
    Execute(strSql);
    //AfxMessageBox("end");
    }_RecordsetPtr CMyDB::GetAllId()
    {
    _RecordsetPtr   pRst = NULL;
    TCHAR sql[150]="select 代号 from 主表";
    _bstr_t strSql = sql;
    pRst = ExecuteRs(strSql);
    return pRst;
    }void CMyDB::DelRecord( LPCTSTR strId )
    {
    TCHAR sql[150]="delete from 主表 where 代号 = '";
    _tcscat(sql,strId);
    _tcscat(sql,"'");
    _bstr_t strSql = sql;
    Execute(strSql);
    }
      

  2.   

    对了,2000年以后的msdn上就有例子吧,在ado里
      

  3.   

    to nichang():
        要是多个参数,是一个一个地APPEND吗?
    to xxc6(过儿):
        你这个程序是对SQL语句的调用吧?好像不是对存储过程的调用!
    谢谢!