• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    ADO編程應用(2)

    發布: 2007-6-30 18:56 | 作者: admin | 來源: | 查看: 12次 | 進入軟件測試論壇討論

    領測軟件測試網 下面是一個簡單的采用了#import方法的基于ADO應用的示例代碼:
    #include <windows.h>
    #import <msado15.dll> rename(“EOF”, “adoEOF”)
    void main()
    {
    HRESULT hr = S_OK;
    //因為沒有在#import中指定no_namespace,所以必須采用ADODB::這樣的形式來定義變量類型
    ADODB::_RecordsetPtr Rs1 = NULL;
    //通過ODBC建立ADO連接
    _bstr_t Connect( “DSN=AdoDemo;UID=sa;PWD=;” );
    _bstr_t Source ( “SELECT * FROM Authors” );
    CoInitialize();
    //初始化Rs1對象
    hr = Rs1.CreateInstance( __uuidof( ADODB::Recordset ) );
    //省略對返回值hr的判斷
    Rs1->Open( Source,
    Connect,
    ADODB::adOpenForwardOnly,
    ADODB::adLockReadOnly,
    -1 );
    //此處可以添加對記錄集Rs1進行操作的代碼
    Rs1->Close();
    Rs1 = NULL;
    ::MessageBox( NULL,“Success!”,“”,MB_OK );
    CoUninitialize();
    }
    2.用MFC OLE創建ADO應用
    MFC OLE同樣能夠封裝(wrapper)一個類型庫,但是與#import不同,它不能從類型庫中產生枚舉類型。MFC類CString和COleVariant隱藏了BSTRS和Variants的細節。由MFC OLE產生的類都繼承了類ColeDispatchDriver,由ADO產生的失敗的HRESULTS被封裝在類ColeDispatchException中。
    用MFC OLE ClassWizard創建ADO應用的步驟如下:
    ●從Tools菜單中,選擇Options選項中的Directories tab條目,在Show Directories中的Library Files中增加路徑C:\program files\common files\system\ado,設置包含ADO類型庫的路徑。
    ●從View菜單中,激活ClassWizard,點擊Add Class按鈕并選擇“From A Type Library...”選項,然后在Type Library dialog box對話框中,從C:\program files\common files\system\ado中選擇文件msado15.dll,在Confirm Classes對話框中,選擇所有列出的類并按OK按鈕退出ClassWizard。這樣,ClassWizard便生成了兩個文件msado15.h和msado15.cpp。
    下面是實現ADO應用的示例代碼:
    //初始化COM對象
    AfxOleInit();
    ...
    //定義數據集對象
    _Recordset Rs1;
    COleException e;
    COleVariant Connect( “DSN=AdoDemo;UID=sa;PWD=;” );
    COleVariant Source ( “SELECT * FROM Authors” );
    //創建數據集對象
    Rs1.CreateDispatch(“ADODB.Recordset.2.0”,&e );
    Rs1.Open( (VARIANT) Source,
    (VARIANT) Connect,
    0, 1, -1 );
    //此處可以添加對結果集Rs1進行處理的代碼
    Rs1.Close();
    Rs1.ReleaseDispatch();
    AfxMessageBox(“Success!”);
    3.用COM API創建ADO工程
    #import和MFC OLE都圍繞著一個給定的自動化對象產生了一個封裝類,它們分別繼承自_com_ptr_t和ColeDispatchDriver。其實也可以通過使用Windows API函數直接初始化ADO對象。為了直接使用ADO和COM對象,需要添加兩個頭文件adoid.h和adoint.h,這兩個頭文件定義了CLSIDs、接口定義和操作ADO類型庫所需要的枚舉類型。此外,還需要增加頭文件INITGUID.H。
    為了能夠編譯用COM API創建的ADO工程文件,還需要在機器中安裝OLE DB SDK或者是MSDASDK工具。下面是利用API創建ADO的簡單的示例代碼:
    #include <windows.h>
    #include <initguid.h>
    #include “adoid.h” // ADO的GUID@#s
    #include “adoint.h” // ADO的類、枚舉等等
    void main()
    {
    HRESULT hr = S_OK;
    // ADORecordset 是在adoint.h中定義的
    ADORecordset* Rs1 = NULL;
    VARIANT Source;
    VARIANT Connect;
    VariantInit( &Source );
    VariantInit( &Connect );
    Source.vt = VT_BSTR;
    Source.bstrVal = ::SysAllocString( L“SELECT * FROM Authors”);
    Connect.vt = VT_BSTR;
    Connect.bstrVal = ::SysAllocString( L“DSN=AdoDemo;UID=sa;PWD=;” );
    hr = CoCreateInstance( CLSID_CADORecordset,
    NULL,
    CLSCTX_INPROC_SERVER,
    IID_IADORecordset,
    (LPVOID *) &Rs1 );
    if( SUCCEEDED( hr ) ) hr = Rs1->Open
    (Source,
    Connect,
    adOpenForwardOnly,
    adLockReadOnly,
    -1 );
    //對記錄集Rs1進行處理
    if( SUCCEEDED( hr ) ) hr = Rs1->Close();
    if( SUCCEEDED( hr ) ) { Rs1->Release(); Rs1 = NULL; }
    if( SUCCEEDED( hr ) ) ::MessageBox( NULL, “Success!”, “”, MB_OK );
    }
    C++ Extensions
    如果用C++進行ADO應用程序開發,應該使用ADO C++ Extensions。我們知道,用VB或者VBScript來操作ADO是非常方便的,但是如果使用C++或者是Java,就必須要處理類似Variants這樣的數據結構以實現和C++數據結構的轉換,而這種處理無疑是所有C++開發人員都很頭疼的事情。但如果使用C++ Extensions的話,ADO就不需要從數據提供者處得到列信息,而是在設計時刻使用開發人員提供的列信息。以下是一個簡單的示例:
    //創建和具體記錄相對應的類
    class CAuthor : public CADORecordBinding
    {
    BEGIN_ADO_BINDING(CCustomRs1)
    ADO_VARIABLE_LENGTH_ENTRY4(1,
    adVarChar, m_szau_id, sizeof(m_szau_id), FALSE)
    ADO_VARIABLE_LENGTH_ENTRY4(2,
    adVarChar,m_szau_fname,sizeof(m_szau_fname), FALSE)
    ADO_VARIABLE_LENGTH_ENTRY4(3,
    adVarChar,m_szau_lname,sizeof(m_szau_lname), FALSE)
    END_ADO_BINDING()
    protected:
    char m_szau_id[12];
    char m_szau_fname[21];
    char m_szau_lname[41];
    };
    void FetchAuthorData()
    {
    CAuthor author;
    //記錄集對象
    _RecordsetPtr pRs;
    IADORecordBinding *piAdoRecordBinding;
    //獲取COM對象接口指針
    pRs.CreateInstance(__uuidof(Recordset));
    //得到需要的記錄集
    pRs->Open(“select au_id,au_fname,au_lname from Employees”,“Provider=SQLOLEDB;Data Source=sureshk1;Database=pubs;User Id=sa;Password=;”,
    adOpenForwardOnly,
    adLockReadOnly,
    adCmdText);
    //查詢接口IADORecordBinding
    pRs->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&piAdoRecordBinding);
    //綁定對象
    piAdoRecordBinding->BindToRecordset(&author);
    //得到記錄中的相關內容
    while (VARIANT_FALSE == pRs->EOF) {
    printf(“%s %s %s”, author.m_szau_id,
    author.m_szau_fname, author.m_szau_lname);
    pRs->MoveNext();
    }
    //釋放對象
    piAdoRecordBinding->Release();
    }

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>