MFC利用ADO技術訪問數據庫(c++)


 

開發平台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庫

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM