VC資料庫程式設計 ado

2021-04-12 12:40:04 字數 4254 閱讀 9891

介紹

vc用ado訪問資料庫全攻略,介紹了vc用ado來訪問資料庫的各個物件及各方法,很經典,也很實用,很值得一看。

讀者評分 10 評分次數 3

正文一、ado概述

ado是microsoft為最新和最強大的資料訪問範例 ole db 而設計的,是乙個便於使用的應用程式層介面。ado 使您能夠編寫應用程式以通過 ole. db 提供者訪問和運算元據庫伺服器中的資料。ado 最主要的優點是易於使用、速度快、記憶體支出少和磁碟遺跡小。ado 在關鍵的應用方案中使用最少的網路流量,並且在前端和資料來源之間使用最少的層數,所有這些都是為了提供輕量、高效能的介面。之所以稱為 ado,是用了乙個比較熟悉的暗喻,ole 自動化介面。

ole db是一組」元件物件模型」(com) 介面,是新的資料庫低層介面,它封裝了odbc的功能,並以統一的方式訪問儲存在不同資訊源中的資料。ole db是microsoft uda(universal data access)策略的技術基礎。ole db 為任何資料來源提供了高效能的訪問,這些資料來源包括關係和非關聯式資料庫、電子郵件和檔案系統、文字和圖形、自定義業務物件等等。也就是說,ole db 並不侷限於 isam、jet 甚至關係資料來源,它能夠處理任何型別的資料,而不考慮它們的格式和儲存方法。在實際應用中,這種多樣性意味著可以訪問駐留在 excel 電子資料表、文字檔案、電子郵件/目錄服務甚至郵件伺服器,諸如 microsoft exchange 中的資料。但是,ole db 應用程式程式設計介面的目的是為各種應用程式提供最佳的功能,它並不符合簡單化的要求。您需要的api 應該是一座連線應用程式和ole db 的橋梁,這就是 activex data objects (ado)。

二、在vc中使用ado(開發步驟好下:)

1、引入ado庫檔案

使用ado前必須在工程的stdafx.h標頭檔案裡用直接引入符號#import引入ado庫檔案,以使編譯器能正確編譯。**如下所示:

用#import引入ado庫檔案

#import "c:/program files/common files/system/ado/msado15.dll"no_namespaces rename("eof" adoeof")

這行語句宣告在工程中使用ado,但不使用ado的名字空間,並且為了避免常數衝突,將常數eof改名為adoeof。現在不需新增另外的標頭檔案,就可以使用ado介面了。

2、初始化ole/com庫環境

必須注意的是,ado庫是一組com動態庫,這意味應用程式在呼叫ado前,必須初始化ole/com庫環境。在mfc應用程式裡,乙個比較好的方法是在應用程式主類的initinstance成員函式裡初始化ole/com庫環境。

3、ado介面簡介

ado庫包含三個基本介面:_connectionptr介面、_commandptr介面和_recordsetptr介面。

_connectionptr介面返回乙個記錄集或乙個空指標。通常使用它來建立乙個資料連線或執行一條不返回任何結果的sql語句,如乙個儲存過程。使用_connectionptr介面返回乙個記錄集不是乙個好的使用方法。對於要返回記錄的操作通常用_recordserptr來實現。而用_connectionptr操作時要想得到記錄條數得遍歷所有記錄,而用_recordserptr時不需要。

_commandptr介面返回乙個記錄集。它提供了一種簡單的方法來執行返回記錄集的儲存過程和sql語句。在使用_commandptr介面時,你可以利用全域性_connectionptr介面,也可以在_commandptr介面裡直接使用連線串。如果你只執行一次或幾次資料訪問操作,後者是比較好的選擇。但如果你要頻繁訪問資料庫,並要返回很多記錄集,那麼,你應該使用全域性_connectionptr介面建立乙個資料連線,然後使用_commandptr介面執行儲存過程和sql語句。

_recordsetptr是乙個記錄集物件。與以上兩種物件相比,它對記錄集提供了更多的控制功能,如記錄鎖定,游標控制等。同_commandptr介面一樣,它不一定要使用乙個已經建立的資料連線,可以用乙個連線串代替連線指標賦給_recordsetptr的connection成員變數,讓它自己建立資料連線。如果你要使用多個記錄集,最好的方法是同command物件一樣使用已經建立了資料連線的全域性_connectionptr介面

,然後使用_recordsetptr執行儲存過程和sql語句。 

4、使用_connectionptr介面

_connectionptr主要是乙個連線介面,取得與資料庫的連線。它的連線字串可以是自己直接寫,也可以指向乙個odbc dsn。

_connectionptr pconn;

if (failed(pconn.createinstance("adodb.connection")))

cstring strsrc;

strsrc="driver=sql server;server=";

strsrc+="suppersoft";

strsrc+=";database=";

strsrc+="mydb";

strsrc+=";uid=sa;pwd=";

cstring strsql = "insert into student(no,name,***,address) values(3,'aaa','male','beijing')";

_variant_t varsrc(strsrc);

_variant_t varsql(strsql);

_bstr_t bstrsrc(strsrc);

if (failed(pconn->open(bstrsrc,"","",-1)))

colevariant vtoptional((long)disp_e_paramnotfound,vt_error);

pconn->execute(_bstr_t(strsql),&vtoptional,-1);

pconn.release();

afxmessagebox("ok!");

5、使用_recordsetptr介面(以連線sql server為例)

_recordsetptr pptr;

if (failed(pptr.createinstance("adodb.recordset")))

cstring strsrc;

strsrc="driver=sql server;server=";

strsrc+="210.46.141.145";

strsrc+=";database=";

strsrc+="mydb";

strsrc+=";uid=sa;pwd=";

strsrc+="sa";

cstring strsql = "select id,name,gender,address from personal";

_variant_t varsrc(strsrc);

_variant_t varsql(strsql);

if(failed(pptr->open(varsql,varsrc,adopenstatic,adlockoptimistic,adcmdtext)))

while(!pptr->getadoeof())

pptr->close();

pptr.release();

6、使用_commandptr介面

_commandptr介面返回乙個recordset物件,並且提供了更多的記錄集控制功能,以下**示例了使用_commandptr介面的方法:

**11:使用_commandptr介面獲取資料

_commandptr pcommand;

_recordsetptr prs;

pcommand.createinstance(__uuidof(command));

pcommand->activeconnection=pconn;

pcommand->commandtext="select * from student";

pcommand->commandtype=adcmdtext;

pcommand->parameters->refresh();

prs=pcommand->execute(null,null,adcmdunknown);

_variant_t varvalue = prs->getcollect("name");

cstring strvalue=(char*)_bstr_t(varvalue);

6、關於資料型別轉換由於com物件是跨平台的,它使用了一種通用的方法來處理各種型別的資料,

因此cstring 類和com物件是不相容的,我們需要一組api來轉換com物件和c++型別的資料。_vatiant_t和_bstr_t就是這樣兩種物件。它們提供了通用的方法轉換com物件和c++型別的資料。 

VC中ADO資料庫程式設計

vc ado連線資料庫 一 ado簡介 ado activex data object 是microsoft資料庫應用程式開發的新介面,是建立在ole db之上的高層資料庫訪問技術,請不必為此擔心,即使你對ole db,com不了解也能輕鬆對付ado,因為它非常簡單易用,甚至比你以往所接觸的odbc...

VC 資料庫程式設計 ADO和ODBC區別

有很多種使用資料庫的方法,對大多數資料庫來說,選擇c 這種產品也許並不適宜。我們知道,像dbase iv,foxpro,oracle和access這樣的產品是完全以資料庫管理為中心的。事實上,這些產品非常善於建立資料庫管理器,以至於它們確實並不善於做太多其它的工作。即使要用更通用化而非更專用化的資料...

ADO資料庫程式設計

一下 全部測試通過 連線資料庫 如下 hresult hr coinitialize null cstring strsql variant t user name try catch com error e 查詢資料庫 cstring sql select from data variant t ...