请问在ADO中如何执行一个带参数的SQL语句呢?
如:select * from users where user_id like :m_userid and password like :m_password .我想在_ConnectPtr或_CommandPtr的execute中执行,但我不知道如何写代码以传送参数m_userid和m_password,这两个参数的实参是用户在两个编辑框里输入的。问题解决立即送分,拜托各位前辈了!

解决方案 »

  1.   

    在ADO中有一个Parameter对象,利用它可以实现。
      

  2.   

    比较龌龊但又常用的方法就是用字符串
    比如说:
    CString strSQL;
    strSQL = "select * from users where user_id like ";
    strSQL += m_userid;
    strSQL += " and password like ";
    strSQL += m_password;
      

  3.   

    同意cxiayang(cxy),用CString的连接操作。
      

  4.   

    char szUser[50],szPwd[50];
    //設m_Pwd及m_user分別為用戶名及口令的CEdit控件變量
    m_Pwd.GetWindowText (szPwd,sizeof(szSvr));
    m_user.GetWindowText (szUser,sizeof(szUser));
    CString strSQL;
    strSQL="SELECT * FROM users where user_id like '"+szUser +"%' And password Like '"+szPwd +"%'";HRESULT hr;
    _ConnectionPtr mConn;
    hr = mConn.CreateInstance("ADODB.Connection");
    if(SUCCEEDED(hr)) hr = mConn->Open(連接字符串.......if(mConn->State)
    {
       _variant_t rt;
        //不需要返回記錄集,
        mConn->Execute ((_bstr_t)strSQL,&rt,adCmdText);   //如果想取得返回記錄就加上pRs下面兩句
        _RecordsetPtr pRs;
        pRs.CreateInstance("ADODB.Recordset");    
        pRs=mConn->Execute ((_bstr_t)strSQL,&rt,adCmdText);
        注:記錄只能通過while (pRs->adoeof)循環取得
           記錄數不能通過pRs->RecordCount;取得
    }
    mConn->Close();
      

  5.   

    使用_CommandPtr方法示例:
    _CommandPtr pCommand;
    _ParameterPtr pam1,pam2;
    ParametersPtr pPars;
    HRESULT hr;
    hr=pCommand.CreateInstance("ADODB.Command");
    pCommand->ActiveConnection=mConn;//mConn見上一個回復
    pCommand->CommandType=adCmdText;
    pCommand->CommandText("SELECT * FROM users WHERE user_id like ? And password Like ?"; //注意: 兩個?分別是要添加的參數pam1和pam2pam1=pCommand->CreateParameter("",adBSTR,asParamInput,0,szUser);
    pam2=pCommand->CreateParameter("",adBSTR,asParamInput,0,szPwd);
    pPars=pCommand->Parameters;
    hr=pPars->Append(pam1);
    hr=pPars->Append(pam2);_Variant vRow,vNull;
    vNull.vt=VT_ERROR;
    pRs=pCommand->Execute(&vRow,&vNull,adCmdText); //pRs見上一個回復
      

  6.   

    更正: 打錯了一個符號,這里應該是 = ,而不是上面的(
    pCommand->CommandText  =  "SELECT * FROM users WHERE user_id like ? And password Like ?";