• <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-06-30來源:作者:點擊數: 標簽:
    下面是一個簡單的采用了#import方法的基于ADO應用的示例代碼: #include windows .h #import msado15.dll rename(“EOF”, “adoEOF”) void main() { HRESULT hr = S_OK; //因為沒有在#import中指定no_namespace,所以必須采用ADODB::這樣的形式來定義
    下面是一個簡單的采用了#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,“Suclearcase/" target="_blank" >ccess!”,“”,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

    老湿亚洲永久精品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>