vc用ado訪問資料庫全攻略,介紹了vc用ado來訪問資料庫的各個物件及各方法,很經典,也很實用,很值得一看。
正文一、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介面返回乙個記錄集不是乙個好的使用方法。對於要返回記錄的操作通常用_recordsetptr來實現。而用 _connectionptr操作時要想得到記錄條數得遍歷所有記錄,而用_recordsetptr時不需要。
_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介面
**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++型別的資料。
詳解MFC使用ADO連線SQLServer資料庫
connectionptr主要是乙個連線介面,取得與資料庫的連線。它的連線字串可以是自己直接寫,也可以指向乙個odbc dsn。connectionptr pconn if failed pconn.createinstance adodb.connection cstring strsrc str...
MFC通過ADO連線 SQL 2005
1 新建乙個類,型別為generic class,名稱為cdatabase 2 新增匯入檔案 import c program files common files system ado msado15.dll no namespace rename eof adoeof rename bof ad...
MFC使用ADO連線SQL Server資料庫
1.首先,要用 import語句來引用支援ado的元件型別庫 tlb 其中型別庫可以作為可執行程式 dll exe等 的一部分被定位在其自身程式中的附屬資源裡,如 被定位在msado15.dll的附屬資源中,只需要直接用 import引用它既可。可以直接在stdafx.h檔案中加入下面語句來實現 i...