Microsoft ADO(ActiveX Data Object)用法淺析

一、ADO簡介
        ADO(ActiveX   Data   Object)是Microsoft數據庫應用程序開發的新接口,是建立在OLE   DB之上的高層數據庫訪問技術,請不必爲此擔心,即使你對OLE   DB,COM不瞭解也能輕鬆對付ADO,因爲它非常簡單易用,甚至比你以往所接觸的ODBC   API、DAO、RDO都要容易使用,並不失靈活性。本文將詳細地介紹在VC下如何使用ADO來進行數據庫應用程序開發,並給出示例代碼。
二、基本流程
        萬事開頭難,任何一種新技術對於初學者來說最重要的還是“入門”,掌握其要點。讓我們來看看ADO數據庫開發的基本流程吧!
        (1)初始化COM庫,引入ADO庫定義文件
        (2)用Connection對象連接數據庫
        (3)利用建立好的連接,通過Connection、Command對象執行SQL命令,或利用Recordset對象取得結果記錄集進行查詢、處理。
        (4)使用完畢後關閉連接釋放對象。
        準備工作:
        爲了大家都能測試本文提供的例子,我們採用Access數據庫,您也可以直接在我們提供的示例代碼中找到這個test.mdb。
        下面我們將詳細介紹上述步驟並給出相關代碼。
        【1】COM庫的初始化
        我們可以使用AfxOleInit()來初始化COM庫,這項工作通常在CWinApp::InitInstance()的重載函數中完成,請看如下代碼:
        BOOL   CADOTest1App::InitInstance()
        {
                AfxOleInit();   ......  
        }
        【2】用#import指令引入ADO類型庫
        我們在stdafx.h中加入如下語句:(stdafx.h這個文件哪裏可以找到?你可以在FileView中的Header   Files裏找到)
        #import   "c:\program   files\common   files\system\ado\msado15.dll "   no_namespace   rename( "EOF ", "adoEOF ")  
        這一語句有何作用呢?其最終作用同我們熟悉的#include類似,編譯的時候系統會爲我們生成msado15.tlh,ado15.tli兩個C++頭文件來定義ADO庫。
        幾點說明:
        (1)   您的環境中msado15.dll不一定在這個目錄下,請按實際情況修改
        (2)   在編譯的時候肯能會出現如下警告,對此微軟在MSDN中作了說明,並建議我們不要理會這個警告。
        msado15.tlh(405)   :   warning   C4146:   unary   minus   operator   applied   to   unsigned   type,   result   still   unsigned  
---------------------------------------------------------
【3】創建Connection對象並連接數據庫
        首先我們需要添加一個指向Connection對象的指針:
        _ConnectionPtr   m_pConnection;
        下面的代碼演示瞭如何創建Connection對象實例及如何連接數據庫並進行異常捕捉。
        BOOL   CADOTest1Dlg::OnInitDialog()
        {
                CDialog::OnInitDialog();
                HRESULT   hr;
                try
                {
                        hr   =   m_pConnection.CreateInstance( "ADODB.Connection ");///創建Connection對象
                        if(SUCCEEDED(hr))  
                        {
                                hr   =   m_pConnection-> Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=test.mdb ", " ", " ",adModeUnknown);
                                ///連接數據庫   ///上面一句中連接字串中的Provider是針對ACCESS2000環境的,對於ACCESS97,需要改爲:Provider=Microsoft.Jet.OLEDB.3.51;
                        }
                }  
                catch(_com_error   e)///捕捉異常  
                {
                        CString   errormessage;   errormessage.Format( "連接數據庫失敗!\r\n錯誤信息:%s ",e.ErrorMessage());   AfxMessageBox(errormessage);///顯示錯誤信息
                }
                ...
        }
        在這段代碼中我們是通過Connection對象的Open方法來進行連接數據庫的,下面是該方法的原型
        HRESULT   Connection15::
        Open(_bstr_t   ConnectionString,   _bstr_t   UserID,   _bstr_t   Password,   long   Options   )
        ConnectionString爲連接字串,UserID是用戶名,   Password是登陸密碼,Options是連接選項,用於指定Connection對象對數據的更新許可權,
        Options可以是如下幾個常量:
        adModeUnknown:缺省。當前的許可權未設置
        adModeRead:只讀
        adModeWrite:只寫
        adModeReadWrite:可以讀寫
        adModeShareDenyRead:阻止其它Connection對象以讀權限打開連接
        adModeShareDenyWrite:阻止其它Connection對象以寫權限打開連接
        adModeShareExclusive:阻止其它Connection對象打開連接
        adModeShareDenyNone:允許其它程序或對象以任何權限建立連接
        我們給出一些常用的連接方式供大家參考:
        (1)通過JET數據庫引擎對ACCESS2000數據庫的連接
                m_pConnection-> Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=C:\\test.mdb ", " ", " ",adModeUnknown);  
        (2)通過DSN數據源對任何支持ODBC的數據庫進行連接:
                m_pConnection-> Open( "Data   Source=adotest;UID=sa;PWD=; ", " ", " ",adModeUnknown);  
        (3)不通過DSN對SQL   SERVER數據庫進行連接:
        m_pConnection-> Open( "driver={SQLServer};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139 ", " ", " ",adModeUnknown);
        其中Server是SQL服務器的名稱,DATABASE是庫的名稱
        Connection對象除Open方法外還有許多方法,我們先介紹Connection對象中兩個有用的屬性ConnectionTimeOut與State
        ConnectionTimeOut用來設置連接的超時時間,需要在Open之前調用,例如:
        m_pConnection-> ConnectionTimeout   =   5;///設置超時時間爲5秒
        m_pConnection-> Open( "Data   Source=adotest; ", " ", " ",adModeUnknown);
        State屬性指明當前Connection對象的狀態,0表示關閉,1表示已經打開,我們可以通過讀取這個屬性來作相應的處理,例如:
        if(m_pConnection-> State)   m_pConnection-> Close();   ///如果已經打開了連接則關閉它
發佈了34 篇原創文章 · 獲贊 7 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章