開發平台VS2012
ODBC(Open Database Connectivity),開放數據庫互連。ODBC是上個世紀八十年代末九十年代初出現的技術,它為編寫關系數據庫的客戶軟件提供了一種統一的接口。ODBC提供一個單一的API,可用於處理不同數據庫的客戶應用程序。使用ODBC API的應用程序可以與任何具有ODBC驅動程序的關系數據庫進行通信。
DAO(Data Access Object),數據訪問對象。DAO就是一組Microsoft Access/Jet數據庫引擎的COM自動化接口。 DAO不像ODBC那樣是面向C/C++程序員的,它是微軟提供給Visual Basic開發人員的一種簡單的數據訪問方法,用於操縱Access數據庫。
RDO(Remote Data Object),遠程數據對象。由於RDO直接調用ODBC API(而不是像DAO那樣通過Jet引擎),所以,可以為使用關系數據庫的應用程序提供更好的性能。
OLE DB,對象鏈接與嵌入數據庫。 OLE DB在兩個方面對ODBC進行了擴展。首先, OLE DB提供了一個數據庫編程的COM接口;第二, OLE DB提供了一個可用於關系型和非關系型數據源的接口。 OLE DB的兩個基本結構是OLE DB提供程序(Provider)和OLE DB用戶程序(Consumer)。
ADO(ActiveX Data Object),ActiveX數據對象,它建立在OLE DB之上。ADO是一個OLE DB用戶程序。使用ADO的應用程序都要間接地使用OLE DB。ADO簡化了OLE DB,提供了對自動化的支持,使得像VBScript這樣的腳本語言也能夠使用ADO訪問數據庫。
ADO的三個核心對象
Connection對象
Connection對象表示了到數據庫的連接,它管理應用程序和數據庫之間的通信。 Recordset和Command對象都有一個ActiveConnection屬性,該屬性用來引用Connection對象。
Command對象
Command對象被用來處理重復執行的查詢,或處理需要檢查在存儲過程調用中的輸出或返回參數的值的查詢。
Recordset對象
Recordset對象被用來獲取數據。 Recordset對象存放查詢的結果,這些結果由數據的行(稱為記錄)和列(稱為字段)組成。每一列都存放在Recordset的Fields集合中的一個Field對象中。
首先創建一個MFC基於對話框的程序,然后添加一個列表框和一個按鈕
將按鈕的屬性修改為如下
在vs中我們要利用ADO訪問數據庫我們首先需要導入一個ADO庫,這個庫是一個動態鏈接庫
這個庫的路徑:
C:\Program Files\Common Files\System\ado\msado15.dll
我們需要在stdafx.h預編譯頭文件中導入這個庫
代碼如下
// stdafx.h : 標准系統包含文件的包含文件,
// 或是經常使用但不常更改的
// 特定於項目的包含文件
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 從 Windows 頭中排除極少使用的資料
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 構造函數將是顯式的
// 關閉 MFC 對某些常見但經常可放心忽略的警告消息的隱藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心組件和標准組件
#include <afxext.h> // MFC 擴展
#include <afxdisp.h> // MFC 自動化類
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "rsEOF")
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 對 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 對 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h> // 功能區和控件條的 MFC 支持
然后編譯一下會出現下面的錯誤
解決方案
生成->重新生成 就沒問題了
然后雙擊對話框上面的查詢按鈕創建它的消息響應函數
OLE DB是基於COM技術編寫的ADO是基於OLE DB基礎之上,它是OLE DB用戶程序,ADO也是一個COM組件
我們在使用COM組件的時候需要先初始化一個COM庫要初始化COM庫需要用到下面函數
void CAdoDlg::OnBnClickedBtnQuery() { // TODO: 在此添加控件通知處理程序代碼 CoInitialize(NULL);//初始化COM庫 CoUninitialize();//卸載COM庫 }
使用完COM庫后需要卸載COM庫
接下來我們就開始訪問數據庫
void CAdoDlg::OnBnClickedBtnQuery() { // TODO: 在此添加控件通知處理程序代碼 CoInitialize(NULL);//初始化COM庫 _ConnectionPtr pConn(__uuidof(Connection)); //_ConnectionPtr是一個智能指針類 //__uuidof獲取Connection接口的全局唯一標識符 //產生了一個Connection智能指針對象 _RecordsetPtr pRst(__uuidof(Recordset)); //產生一個記錄集的智能指針對象 pConn->ConnectionString = _T("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Test;Data Source=ELITE");//存儲連接字串的變量 pConn->Open("", "", "", adConnectUnspecified); //打開到數據庫的連接 pRst = pConn->Execute("select * from Table_1", NULL, adCmdText); while(!pRst->rsEOF) { ((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)(pRst->GetCollect("name"))); pRst->MoveNext(); } pRst->Close();//關閉記錄集 pConn->Close();//關閉連接 pRst.Release(); pConn.Release(); CoUninitialize();//卸載COM庫 }