日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

简析Visual C++中的活动数据对象

發布時間:2025/3/15 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简析Visual C++中的活动数据对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡析Visual C++中的活動數據對象

程序運行效果截圖:


摘 要: 本文簡要介紹了微軟的活動數據對象(ADO)模型,結合實例闡述了在Visual C++環境下使用ADO操縱數據庫的基本步驟,分析ADO的特點及與開放式數據庫連接(ODBC)的差異與應用前景。

左圖:ADO對象模型

  關鍵詞: 活動數據對象 數據庫 Visual C++

  1 ADO是微軟整個COM戰略體系中的一個組成部分

  活動數據對象(ADO)是一組由微軟提供的COM組件。 ADO建立在微軟所提倡的COM體系結構之上,它的所有接口都是自動化接口,因此在C++、VisualBasic、Delphi等支持COM的開發語言中通過接口都可以訪問到ADO。ADO通過使用OLE DB這一新技術實現了以相同方式可以訪問關系數據庫、文本文件、非關系數據庫、索引服務器和活躍目錄服務等的數據,擴大了應用程序中可使用的數據源范圍,從而成為微軟整個COM戰略體系中訪問數據源組件的首選,是ODBC的替代產品。



  2 ADO對象模型組成

  與微軟的其它數據訪問模型DAO和RDO相比,ADO對象模型非常精煉,僅由三個主要對象Connection、Command、Recordset和幾個輔助對象組成,其相互關系如圖所示。Connection對象提供OLE DB數據源和對話對象之間的關聯,它通過用戶名稱和口令來處理用戶身份的鑒別,并提供事務處理的支持;它還提供執行方法,從而簡化數據源的連接和數據檢索的進程。Command對象封裝了數據源可以解釋的命令,該命令可以是SQL命令、存儲過程或底層數據源可以理解的任何內容。Record set用于表示從數據源中返回的表格數據,它封裝了記錄集合的導航、記錄更新、記錄刪除和新記錄的添加等方法,還提供了批量更新記錄的能力。其它輔助對象則分別提供封裝ADO錯誤、封裝命令參數和封裝記錄集合的列。

  3 ADO的特點分析

  (1)由于封裝了許多底層工作,使用ADO與使用ODBC幾乎是一樣方便。

  (2) ADO不僅具有ODBC的主要功能,而且ADO適用的數據源的范圍要大的多。

  (3)在定義ADO記錄集變量和數據庫表字段綁定類時,要求記錄集的字段變量、狀態變量與數據庫表字段的個數、順序必須相同。這一點比在FMC中使用ODBC要復雜一些。但在數據庫字段與ADO記錄集字段變量綁定的宏中,ADO 提供的數據類型要遠多于FMC中的RFX(如日期時間類型,在ODBC中只能轉換為Cstring類型)。

  (4)ADO允許同一Connection實例下有多個Record set實例。

  (5)ADO允許進行批更新(使用的Update Batch方法),這樣將大大減輕網絡負擔,提高數據庫處理效率。

4 ADO在Visual C++中的使用

  利用微軟在Micrsoft Studio 6中提供的ADO2,可以在Visual C++中使用ADO接口操縱SQL SERVER數據庫。在編譯型高級語言中使用ADO,比起在一些腳本語言(如Visual Basic Scropt和JavaScript)中使用ADO要困難一些。

  以下給出一個Visual C++下使用ADO的Connection對象及其Record set對象的基本步驟:

  (1) 使用import指令引入ADO2組件

  例:#import "C:ADOmsado15.dll" no_namespace rename("EOF", "EndOfFile")

  (2) 定義CADORecordBinding 的派生類,用于程序與數據庫表字段的交互,該類的定義可參見icrsint.h。

  例:

class CIntlive : public CADORecordBinding
{
public:
DBTIMESTAMP m_datetime; //定義ADO記錄集字段變量(與數據庫表字段相對應)
long m_key;
long m_value;
long m_quality;
WORD m_stsdatetime; //定義ADO記錄集狀態變量
WORD m_stskey;
WORD m_stsvalue;
WORD m_stsquality;
BEGIN_ADO_BINDING(CIntlive) //將數據庫字段與ADO記錄集字段變量綁定
ADO_VARIABLE_LENGTH_ENTRY2(1,adDBTimeStamp,m_datetime,sizeof(m_datetime),m_stsdatetime,true)
ADO_NUMERIC_ENTRY(2,adInteger,m_key,10,0,m_stskey,true)
ADO_NUMERIC_ENTRY(3,adInteger,m_value,10,0,m_stsvalue,true)
ADO_NUMERIC_ENTRY(4,adInteger,m_quality,10,0,m_stsquality,true)
END_ADO_BINDING()
};

  (3) 調用CoInitialize初始化COM ::CoInitialize(NULL);

  (4) 聲明ADO的Connection對象指針和Recordset對象指針并初始化。(類型名在 msado15.dll中已定義)

  例:

_ConnectionPtr pConnection1 = NULL;
_RecordsetPtr rstADO1 = NULL;

  (5) 定義CADORecordBinding派生類的實例及其Bind接口指針。

  例:

CIntlive m_intdata;
IADORecordBinding *rstADOBind1 = NULL;

  (6) 產生Connection對象實例和Record set對象實例。

  例:

pConnection1.CreateInstance(_uuidof(Connection));
rstADO1.CreateInstance(__uuidof(Recordset)) ;

  (7) 連接到數據庫并打開Record set對象,其中open函數的參數的使用方法可參見微軟MSDN中ADO 相應對象參數的Basic描述。

  例:

PConnection1->Open("driver={SQL server};server=servera;uid=sa;pwd=;database=pubs","","",NULL);
rstADO1->Open("data", _variant_t((IDispatch *)pConnection1,true),
adOpenKeyset,adLockBatchOptimistic, adCmdTable);

  (8) 將CADORecordBinding派生類的實例聯編到Record set對象的Bind接口。

  例:

RstADOBind1->BindToRecordset(&m_intdata);

  (9) 對Record set對象實例進行操作。操作方法可參見微軟MSDN中ADO Record set對象相應方法的Basic描述。

   例:

rstADO1->Move Next(); //移動游標到下一條記錄
rstADO1->Update(_variant_t("quality"),_variant_t("3"))); //修改記錄的quality字段的值為3
rstADO1->Update Batch(adAffectAll)); //將在Record set對象上的所有更新一次送入數據庫

  (10) 關閉Record set對象并釋放Bind接口。

  例:

RstADO1->Close();
RstADOBind2->Release();

  (11) 關閉連接 pConnection1->Close();

  (12) 調用CoUnitialize釋放COM資源 ::CoUninitialize();

  5 結論

  作為ODBC的替代產品,ADO確實有其過人之處。由于ADO數據源幾乎覆蓋了目前常見的數據源類型,對于ODBC所不支持的數據源,ADO無疑是唯一的選擇。而ADO的批更新功能,更是網絡環境下大數據量更新應用的重要因素。由于ADO缺乏大量的第三方廠商的支持,使得ADO目前遠不如ODBC普及,但其面向對象的特性將使ADO具有比較廣闊的發展前景。

總結

以上是生活随笔為你收集整理的简析Visual C++中的活动数据对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。