Visual C ADO資料庫程式設計入門 1

2021-05-28 00:55:45 字數 4320 閱讀 6371

ado 是目前在

windows環境中比較流行的客戶端資料庫程式設計技術。ado是建立在ole db底層技術之上的高階程式設計介面,因而它兼具有強大的資料處理功能(處理各種不同型別的資料來源、分布式的資料處理等等)和極其簡單、易用的程式設計介面,因而得到了廣泛的應用。而且按微軟公司的意圖,ole db和ado將逐步取代 odbc和dao。現在介紹ado各種應用的文章和書籍有很多,本文著重站在初學者的角度,簡要**一下在v

c++中使用ado程式設計時的一些問題。我們希望閱讀本文之前,您對ado技術的基本原理有一些了解。

一、在vc++中使用ado程式設計

ado實際上就是由一組automation物件構成的元件,因此可以象使用其它任何automation物件一樣使用ado。ado中最重要的物件有三個:connection、command和recordset,它們分別表示連線物件、命令物件和記錄集物件。如果您熟悉使用mfc中的odbc類(cdatabase、crecordset)程式設計,那麼學習ado程式設計就十分容易了。

使用ado程式設計時可以採用以下三種方法之一:

1、使用預處理指令#import

#import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace rename("eof", "endoffile")

但要注意不能放在stdafx.h檔案的開頭,而應該放在所有include指令的後面。否則在編譯時會出錯。

程式在編譯過程中,vc++會讀出msado15.dll中的型別庫資訊,自動產生兩個該型別庫的標頭檔案和實現檔案msado15.tlh和msado15.tli(在您的debug或release目錄下)。在這兩個檔案裡定義了ado的所有物件和方法,以及一些列舉型的常量等。我們的程式只要直接呼叫這些方法就行了,與使用mfc中的coledispatchdriver類呼叫automation物件十分類似。

2、使用mfc中的cidispatchdriver

就是通過讀取msado15.dll中的型別庫資訊,建立乙個coledispatchdriver類的派生類,然後通過它呼叫ado物件。

3、直接用com提供的api

如使用如下**:

clsid clsid;

hresult hr = ::clsidfromprogid(l"adodb.connection", &clsid);

if(failed(hr))

::cocreateinstance(clsid, null, clsctx_server, iid_idispatch, (void **)

&pdispatch);

if(failed(hr))

以上三種方法,第一和第二種類似,可能第一種好用一些,第三種程式設計可能最麻煩。但可能第三種方法也是效率最高的,程式的尺寸也最小,並且對ado的控制能力也最強。

據微軟資料介紹,第一種方法不支援方法呼叫中的預設引數,當然第二種方法也是這樣,但第三種就不是這樣了。採用第三種方法的水平也最高。當你需要繞過ado而直接呼叫ole db底層的方法時,就一定要使用第三種方法了。

ado程式設計的關鍵,就是熟練地運用ado提供的各種物件(object)、方法(method)、屬性(property)和容器(collection)。另外,如果是在ms sql或oracle等大型資料庫上程式設計,還要能熟練使用sql語言。

二、使用#import方法的程式設計步驟

這裡建議您使用#import的方法,因為它易學、易用,**也比較簡潔。

1、新增#import指令

開啟stdafx.h檔案,將下列內容新增到所有的include指令之後:

#include //include support for vc++ extensions #import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace rename("eof", "adoeof")

其中icrsint.h檔案包含了vc++擴充套件的一些預處理指令、巨集等的定義,用於com程式設計時使用。

2、定義_connectionptr型變數,並建立資料庫連線

建立了與資料庫伺服器的連線後,才能進行其他有關資料庫的訪問和操作。ado使用connection物件來建立與資料庫伺服器的連線,所以它相當於mfc中的cdatabase類。和cdatabase類一樣,呼叫connection物件的open方法即可建立與伺服器的連線。

資料型別 _connectionptr實際上就是由類模板_com_ptr_t而得到的乙個具體的例項類,其定義可以到msado15.tlh、comdef.h 和comip.h這三個檔案中找到。在msado15.tlh中有:

_com_smartptr_typedef(_collection, __uuidof(_collection));

經巨集擴充套件後就得到了_connectionptr類。_connectionptr類封裝了connection物件的idispatch介面指標,及一些必要的操作。我們就是通過這個指標來操縱connection物件。類似地,後面用到的_commandptr和_recordsetptr型別也是這樣得到的,它們分別表示命令物件指標和記錄集物件的指標。

(1)、連線到ms sql server

注意連線字串的格式,提供正確的連線字串是成功連線到資料庫伺服器的第一步,有關連線字串的詳細資訊參見微軟msdn library光碟。

本例連線字串中的server_name,database_name,user_name和password在程式設計時都應該替換成實際的內容。

_connectionptr pmyconnect=null;

hresult hr=pmyconnect.createinstance(__uuidof(connection)));

if(failed(hr))return;

_bstr_t strconnect="provider=sqloledb; server=server_name;"

"database=database_name; uid=user_name; pwd=password;";

//connecting to the database server now:

trycatch (_com_error &e)

::messagebox(null,e.description(),"警告",mb_ok │ mb_iconwarning);

注意connection物件的open方法中的連線字串引數必須是bstr或_bstr_t型別。另外,本例是直接通過ole db provider建立連線,所以無需建立資料來源。

(2)、通過odbc driver連線到database server連線字串格式與直接用odbc程式設計時的差不多:

_bstr_t strconnect="dsn=datasource_name; database=database_name; uid=user_name; pwd=password;";

此時與odbc程式設計一樣,必須先建立資料來源。

3、定義_recordsetptr型變數,並開啟資料集

定義_recordsetptr型變數,然後通過它呼叫recordset物件的open方法,即可開啟乙個資料集。所以recordset物件與mfc中的crecordset類類似,它也有當前記錄、當前記錄指標的概念。如:

_recordsetptr m_precordset;

if(!failed(m_precordset.createinstance( __uuidof( recordset )))

m_pdoc->m_initialized=false;

return;

try//try

catch (_com_error &e)

cstring str=(char*)e.description(); ::messagebox(null,str+"\n又出毛病了。","提示",

mb_ok│mb_iconwarning);

本例中的name和age都是欄位名,讀取的字段值分別儲存在sname和cage變數內。例中的fields是recordset物件的容器,getitem方法返回的是field物件,而value則是field物件的乙個屬性(即該字段的值)。通過此例,應掌握操縱物件屬性的方法。例如,要獲得field 物件的value屬性的值可以直接用屬性名value來引用它(如上例),但也可以呼叫get方法,例如:

cstring sname=(char*)(_bstr_t)(m_precordset->fields->getitem

(_variant_t("name"))->getvalue());

從此例還可以看到,判斷是否到達記錄集的末尾,使用記錄集的adoeof屬性,其值若為真即到了結尾,反之則未到。判斷是否到達記錄集開頭,則可用bof屬性。

另外,讀取資料還有乙個方法,就是定義乙個繫結的類,然後通過繫結的變數得到字段值(詳見後面的介紹)。

Visual C ADO 資料庫程式設計

1 通過access建立資料庫ado.mdb。3 初始化com庫。使用函式來初始化com庫,首先轉到ado example.cpp檔案中的initinstance 函式,新增如下 4 用預處理指令 import匯入ado型別庫。單擊fileview視窗,單擊headerfiles資料夾,雙擊stda...

資料庫 資料庫程式設計二

標頭檔案 include include include include include include include ifdef cplusplus extern c endif 輔助方法實現 include pub.h 設定退格鍵不回顯 intset backkey 設定tremios的擦除字...

php資料庫程式設計,php資料庫程式設計步驟

php有三種方式來操作mysql資料庫 1.mysql擴充套件庫 2.mysqli擴充套件庫 3.pdo mysql擴充套件庫和mysql資料庫的區別 mysql資料庫用於存放資料 mysql資料庫的三層結構示意圖 mysql擴充套件庫是一堆函式,是php設計者提供給程式設計師用於完成對mysql資...