我在stdafx.h中添加了:#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "adoEOF")然后在AppDlg.cpp的InitInstance()中使用连接:

                   _ConnectionPtr pConnection1 = NULL;

AfxEnableControlContainer();
AfxOleInit(); try
{

pConnection1->ConnectionString="Provider=SQLOLEDB.1
                            ;Persist Security Info=False;
                       User ID=sa;Initial Catalog=ADOtest;Data Source=CXL"
pConnection1->ConnectionTimeout=5;
pConnection1->Open("","","",adConnectUnspecified);
}
可是连语法编译都通不过,是不是我还少加了什么东西呢?根使用ADO连接数据库(sql server)一共有那些前期步骤?请告诉我,谢谢大家啊!
是不是COM没有初始化呢?那么应该怎么初始化呢?谢谢

解决方案 »

  1.   

    // BeingConnectionStringCpp
    #import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
        no_namespace rename("EOF", "EndOfFile")#include <ole2.h>
    #include <stdio.h>
    #include <conio.h>// Function declarations
    inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
    void ConnectionStringX();
    _bstr_t GetState(int intState); 
    void PrintProviderError(_ConnectionPtr pConnection);
    void PrintComError(_com_error &e);///////////////////////////////////////////////////////////
    //                                                       //
    //      Main Function                                    //
    //                                                       //
    ///////////////////////////////////////////////////////////void main()
    {
        if(FAILED(::CoInitialize(NULL)))
            return;    ConnectionStringX();    //Wait here for user to see the output..
        printf("\nPress any key to continue...");
        getch();    ::CoUninitialize();
    }///////////////////////////////////////////////////////////
    //                                                       //
    //      ConnectionStringX Function                       //
    //                                                       //
    ///////////////////////////////////////////////////////////void ConnectionStringX()
    {
        // Define Connection object pointers.
        // Initialize pointers on define.
        // These are in the ADODB::  namespace
         _ConnectionPtr pConnection1 = NULL;
         _ConnectionPtr pConnection2 = NULL;
         _ConnectionPtr pConnection3 = NULL;
         _ConnectionPtr pConnection4 = NULL;    //Define Other Variables
        HRESULT  hr = S_OK;    try
        {
            // Open a connection using OLE DB syntax.
            TESTHR(pConnection1.CreateInstance(__uuidof(Connection)));
            pConnection1->ConnectionString = "provider=SQLOLEDB;" 
                "Data Source=MyServer;Initial Catalog=Pubs;"
              "User Id=sa;Password=;";
            pConnection1->ConnectionTimeout = 30;
            pConnection1->Open("","","",adConnectUnspecified);        // Open a connection using a DSN and ODBC tags.
            TESTHR(pConnection2.CreateInstance(__uuidof(Connection)));
            pConnection2->ConnectionString = "DSN=Pubs;UID=sa;PWD=;";
            pConnection2->Open("","","",adConnectUnspecified);        // Open a connection using a DSN and OLE DB tags.
            TESTHR(pConnection3.CreateInstance(__uuidof(Connection)));
            pConnection3->ConnectionString = "Data Source=Pubs;User ID=sa;"
                "Password=;";
            pConnection3->Open("","","",adConnectUnspecified);        // Open a connection using a DSN and individual
            // arguments instead of a connection string.
            TESTHR(pConnection4.CreateInstance(__uuidof(Connection)));
            pConnection4->Open("Pubs","sa","",adConnectUnspecified);        // Display the state of the connections.
            printf("cnn1 state: %s\n", 
                (LPCTSTR)GetState(pConnection1->State));
            printf("cnn2 state: %s\n", 
                (LPCTSTR)GetState(pConnection2->State));
            printf("cnn3 state: %s\n", 
                (LPCTSTR)GetState(pConnection3->State));
            printf("cnn4 state: %s\n", 
                (LPCTSTR)GetState(pConnection4->State));        //Cleanup objects before exit.
            pConnection4->Close();
            pConnection3->Close();
            pConnection2->Close();
            pConnection1->Close();
        }    catch(_com_error &e)
        {
            // Notify user of any errors.
            // Pass a connection pointer accessed from the Connection.
            PrintProviderError(pConnection1);
            if(pConnection2)
                PrintProviderError(pConnection2);
            if(pConnection3)
                PrintProviderError(pConnection3);
            if(pConnection4)
                PrintProviderError(pConnection4);
            PrintComError(e);
        }
    }///////////////////////////////////////////////////////////
    //                                                       //
    //      GetState Function                                //
    //                                                       //
    ///////////////////////////////////////////////////////////_bstr_t GetState(int intState) 
    {
        _bstr_t strState; 
        switch(intState) 
        {
            case adStateClosed:
                strState = "adStateClosed";
                break;
            case adStateOpen:
                strState = "adStateOpen";
                break;
            default:
            ;
        }
        return strState;
    }///////////////////////////////////////////////////////////
    //                                                       //
    //      PrintProviderError Function                      //
    //                                                       //
    ///////////////////////////////////////////////////////////void 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);
                printf("Error number: %x\t%s\n", pErr->Number, 
                    (LPCSTR)pErr->Description);
            }
        }
    }///////////////////////////////////////////////////////////
    //                                                       //
    //      PrintComError Function                           //
    //                                                       //
    ///////////////////////////////////////////////////////////void PrintComError(_com_error &e)
    {
        _bstr_t bstrSource(e.Source());
        _bstr_t bstrDescription(e.Description());    // Print Com errors.  
        printf("Error\n");
        printf("\tCode = %08lx\n", e.Error());
        printf("\tCode meaning = %s\n", e.ErrorMessage());
        printf("\tSource = %s\n", (LPCSTR) bstrSource);
        printf("\tDescription = %s\n", (LPCSTR) bstrDescription);
    }
    // EndConnectionStringCpp
      

  2.   

    啊,这不是COPY的MSDN的吗:(
      

  3.   


    是不是少了这两句实例化的代码:
    MyDb.CreateInstance("ADODB.Connection");
    MySet.CreateInstance("ADODB.Recordset");
    在initinstance中还要加上初始化com环境的:
    ::CoInitialize(NULL);
    不然有可能连接过程中出现“无效指针”的问题。
    为什么不说清楚你的错误信息是什么呢?
      

  4.   

    MyDb.CreateInstance("ADODB.Connection");
    MySet.CreateInstance("ADODB.Recordset");这两句不可少!::CoInitialize(NULL);//这一句可以不要!www.vccode.com第十期上有几篇文章,建议看看!
      

  5.   

    我是这么用的,需要在ODBC设置数据源
    BOOL CXXXApp::InitInstance()
    {
    AfxEnableControlContainer(); AfxOleInit();
    try
    {   m_pConnection.CreateInstance(__uuidof(Connection));
    m_pConnection->ConnectionTimeout = 8;
    //SQL SERVER
        // m_pConnection->Open("Driver=SQL Server;Database=stufilemanage;Server=127.0.0.1;UID=sa;PWD=;","","",adModeUnknown);
    }
    catch(_com_error e)///捕捉异常
    {
    AfxMessageBox("连接数据库失败!");
    return FALSE;

    ....
    }