_varint_t vpn;
CSting strSql="select * from tableName);
m_pConnection->Execute(_bstr_t(strSql),&vpn,1)这样就OK了(strSql可以为任何正确的Sql语句)请问:这里的strSql能不能为多条SQL语句的组合?例如:
CSting strSql="select * from tableName1;select * from tableName2";

解决方案 »

  1.   

    哈,没这样试过,但我相信一定可以,因为m_pConnection->Execute(...)支持多结果集返回,要不能_RecordsetPtr::NextRecordset(...)提供这个方法干什么。^_^
      

  2.   

    没这样试过,应该把两个SQL语句分开
      

  3.   

    这是msdn的示例,Command对象的Execute 方法和Recordset对象的Open方法可以这样使用复合的SQL语句
    void NextRecordsetX(void)
    {
        // Define ADO object pointers.
        // Initialize pointers on define.
        // These are in the ADODB::  namespace.
        _RecordsetPtr    pRstCompound = NULL;    // Define Other Variables
        HRESULT hr = S_OK;
        _variant_t index;
        index.vt = VT_I2;    // Assign connection string to a variable.
        _bstr_t strCnn("Provider='sqloledb';Data Source='MySqlServer';"
                "Initial Catalog='pubs';Integrated Security='SSPI';");    try
        {
            // Open recordset from Authors table.
            TESTHR(pRstCompound.CreateInstance(__uuidof(Recordset)));        // Pass the Cursor type and Lock type to the Recordset.
            pRstCompound->Open("SELECT * FROM authors; SELECT * FROM stores;" 
                "SELECT * FROM jobs", strCnn, adOpenForwardOnly, 
                adLockReadOnly, adCmdText);        // Display results from each SELECT statement.
            int intCount = 1;
            while(!(pRstCompound==NULL))
            {
                printf("\n\nContents of recordset #%d\n", intCount);            while(!pRstCompound->EndOfFile)
                {
                    index.iVal = 0;
                    printf("%s\t", (LPCSTR)(_bstr_t)pRstCompound->\
                                GetFields()->GetItem(& index)->Value);
                    index.iVal = 1;
                    printf("%s\n", (LPCSTR)(_bstr_t)pRstCompound->\
                                    Fields->GetItem(& index)->Value);                pRstCompound->MoveNext();                int intLine = intLine + 1;
                    if (intLine % 22 == 0)
                    {
                        printf("\nPress any key to continue...");
                        getch();                    //Clear the screen for the next display.
                        system("cls"); 
                    }
                }
                long    lngRec = 0;
                pRstCompound = pRstCompound->
                    NextRecordset((VARIANT *)lngRec);            printf("\nPress any key to continue...");
                getch();
                intCount = intCount + 1;
            }
        }
        catch(_com_error &e)
        {
           // Notify the user of errors if any.
           // Pass a connection pointer accessed from the Recordset.
            _variant_t vtConnect = pRstCompound->GetActiveConnection();        // GetActiveConnection returns connect string if connection
            // is not open, else returns Connection object.
            switch(vtConnect.vt)
            {
                case VT_BSTR:
                    PrintComError(e);
                    break;
                case VT_DISPATCH:
                    PrintProviderError(vtConnect);
                    break;
                default:
                    printf("Errors occured.");
                    break;
            }
        }    // Clean up objects before exit.
        if (pRstCompound)
            if (pRstCompound->State == adStateOpen)
                pRstCompound->Close();
    }
      

  4.   

    Command对象的Execute 方法和Recordset对象的Open方法可以这样使用复合的SQL语句,,, 那么Connection对象的Execute方法可以使用这样的复合SQL语句吗?