日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

一个简单而又灵活的数据库操作类

發布時間:2025/3/15 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个简单而又灵活的数据库操作类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個簡單而又靈活的數據庫操作類

作者: 紫瑗

******************************************************************************************************

本文關于 ADO 簡介的文字取自 VB 編程樂園 ,特此聲明。

適用范圍:數據庫

適用對象: C++ ,初級

******************************************************************************************************

一、 ADO 簡介

ActiveX Data Objects (ADO) 是微軟最新的數據訪問技術。它被設計用來同新的數據訪問層 OLE DB Provider 一起協同工作,以提供通用數據訪問( Universal Data Access )。 OLE DB 是一個低層的數據訪問接口,用它可以訪問各種數據源,包括傳統的關系型數據庫,以及電子郵件系統及自定義的商業對象。

ADO 向我們提供了一個熟悉的,高層的對 OLE DB 的 Automation 封裝接口。對那些熟悉 RDO 的程序員來說,你可以把 OLE DB 比作是 ODBC 驅動程序。如同 RDO 對象是 ODBC 驅動程序接口一樣, ADO 對象是 OLE DB 的接口;如同不同的數據庫系統需要它們自己的 ODBC 驅動程序一樣,不同的數據源要求它們自己的 OLE DB 提供者( OLE DB provider )。目前,雖然 OLE DB 提供者比較少,但微軟正積極推廣該技術,并打算用 OLE DB 取代 ODBC 。

二、在哪里能得到 ADO?

目前最新版本的已經可以從微軟網站免費下載。到目前為止,微軟網站仍是你獲取有關 ADO 最新信息的最佳場所。 ADO 是作為 OLE DB SDK 的一部分提供的。你可以從下面這個網址下載:

http://www.microsoft.com/data/oledb/download.htm

三、如何使用 ADO

使用 ADO 有許多種方式,最常用的方法是直接使用 Activate 控件中的 Microsoft ADO Data Control ,這樣用起來很方便。但是大家可能覺得它也有不少的缺點,比如說用起來不夠方便啦,函數的接口都較晦澀難懂等等,總之,就是感覺到不靈活。

今天我為大家介紹一個類,它實質上是對 ADO 的一個包裝,使用起來相當靈活。詳細代碼在附帶的壓縮包 ado.zip 內。

這個類的作者是 Carlos Antollini ,當前版本為 2.04 ,支持 ado1.5 ,有兩個文件,分別為 ado.h 和 ado.cpp 。我僅作了少量改動。

庫簡介:

這個庫主要由 6 個部分組成,分別是 CADOCommand (命令處理), CADODatabase (數據庫主體), CADOException (意外處理), CADOFieldInfo (字段值), CADOParameter (參數), CADORecordset (記錄集)。其中最主要的就是 CAdoCommand 類, CAdoDatabase 類和 CAdoRecordset 。

要使用這個庫,你可能需要安裝以下軟件(我沒有嚴格測試,所以實際上的情況可能略有出入):

1 , MDAC2.8

2 , Microsoft Visual Studio 6.0

使用方法和范例

下面我會以一個連接 sql server 數據庫的例子做示范,逐步展示如何去使用這個庫。

第一步,創建一個對話框工程,為主對話框添加如圖所示的幾個控件

第二步,加入 ado.h 和 ado.cpp ,并且把 MSADO15.DLL 拷到工程 .dsp 所在的目錄

第三步,用 access 創建一個數據庫,添加一張 account 表,添加幾個記錄

第四步,修改代碼如下:

// 主對話框的頭文件

#include "ado.h"

class CAdoDemoDlg : public CDialog

{

// Construction

public:

CAdoDemoDlg(CWnd* pParent = NULL); // standard constructor

// 省略系統代碼

private:

// 取當前的值

void GetCurrentVal(void);

// 設置當前窗口的控件的數據

void SetControlData(CString strAccount, CString strNick, int nArticle, int nFlower, int nKnife);

// 初始化數據庫

BOOL InitDatabase(void);

CADORecordset m_pRs; // 數據表

CADODatabase m_pDb; // 數據庫

int nRecordIndex_; // 當前記錄的索引

};

// 主對話框的實現文件

// AdoDemoDlg.cpp : implementation file

CAdoDemoDlg::CAdoDemoDlg(CWnd* pParent /*=NULL*/)

: CDialog(CAdoDemoDlg::IDD, pParent) // 構造函數

{

//… 省略系統代碼

nRecordIndex_ =0;

}

BOOL CAdoDemoDlg::OnInitDialog() // 初始化對話框

{

CDialog::OnInitDialog();

//… 省略系統代碼

InitDatabase(); // 初始化數據庫

GetCurrentVal(); // 取當前的記錄值

return TRUE; // return TRUE unless you set the focus to a control

}

void CAdoDemoDlg::OnDestroy() // 關閉窗口的時候,關閉數據庫

{

CDialog::OnDestroy();

if(m_pRs.IsOpen())

{

m_pRs.Close();

}

if(m_pDb.IsOpen())

{

m_pDb.Close();

}

}

BOOL CAdoDemoDlg::InitDatabase()

{ // 初始化數據庫

//strConnection, 數據庫連接串, ado 支持各種連接串

CString strConnection ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:// Workspace//

AdoDemo//db.mdb;Persist Security Info=False";

if(!m_pDb.Open(strConnection)) // 打開數據庫

{

AfxMessageBox(m_pDb.GetLastErrorString());

return FALSE;

}

m_pRs = CADORecordset(&m_pDb); // 初始化記錄集

CString strSQL ="";

strSQL.Format("SELECT * from account");

CADOCommand cmd(&m_pDb, _T(""));

cmd.SetText(strSQL);

cmd.SetType(adCmdText);

if(!m_pRs.Execute(&cmd)) // 使用 SQL 語句生成記錄源

{

AfxMessageBox(m_pDb.GetLastErrorString());

return FALSE;

}

return TRUE;

}

void CAdoDemoDlg::SetControlData(CString strAccount, CString strNick, int nArticle, int nFlower, int nKnife)

{ // 設置控件上顯示的內容

// 賬號

m_Account .SetWindowText(strAccount);

// 昵稱

m_Nick .SetWindowText(strNick);

CString strNumText;

// 貼子數

strNumText .Format("%d", nArticle);

m_ArticleCount .SetWindowText(strNumText);

// 鮮花

strNumText .Format("%d", nFlower);

m_Flower .SetWindowText(strNumText);

// 飛刀

strNumText .Format("%d", nKnife);

m_Knife .SetWindowText(strNumText);

}

void CAdoDemoDlg::OnPrev()

{ // 上一步按鈕的處理

if(!m_pRs.IsOpen()) // 數據庫沒打開

return ;

if(m_pRs.IsBOF()) // 到頂了

return ;

if(0 == nRecordIndex_)

return ;

nRecordIndex_ --;

m_pRs.MovePrevious();

GetCurrentVal();

}

void CAdoDemoDlg::OnNext()

{ // 下一步按鈕的處理函數

if(!m_pRs.IsOpen()) // 數據庫沒打開

return ;

if(m_pRs.IsEof() ||

m_pRs.IsBof()) // 到底了

return ;

if(((int)m_pRs.GetRecordCount() - 1) == nRecordIndex_)

return ;

nRecordIndex_ ++;

m_pRs.MoveNext();

GetCurrentVal();

}

void CAdoDemoDlg::GetCurrentVal()

{// 取當前記錄的數據

if(!m_pRs.IsOpen()) // 數據庫沒打開

return ;

CString strAccount;

m_pRs .GetFieldValue(" 賬號 ", strAccount, "");

CString strNick;

m_pRs .GetFieldValue(" 昵稱 ", strNick, "");

CString strArticleCount;

m_pRs .GetFieldValue(" 發貼數量 ", strArticleCount, "");

CString strFlower;

m_pRs .GetFieldValue(" 鮮花數 ", strFlower, "");

CString strKnife;

m_pRs .GetFieldValue(" 飛刀數 ", strKnife, "");

SetControlData(strAccount, strNick, atoi(strArticleCount), atoi(strFlower), atoi(strKnife));

}

程序說明

這個演示程序很簡單,只演示了如何查詢一個數據庫,其實數據庫程序確實沒什么很特別,主要是使用 sql 語句作操作就可以了。

程序的重點在三個函數:

1 , BOOL InitDatabase(void)

這個函數初始化了數據庫

CString strConnection ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:// Workspace//

AdoDemo//db.mdb;Persist Security Info=False";

上面一個語句就生成了一個連接字符串

if(!m_pDb.Open(strConnection))

使用上面產生的語句打開數據庫

m_pRs = CADORecordset(&m_pDb);

如果數據庫成功打開,則打開這個數據庫的表

CString strSQL ="";

strSQL.Format("SELECT * from account");

先生成一個 SQL 語句

CADOCommand cmd(&m_pDb, _T(""));

cmd.SetText(strSQL);

cmd.SetType(adCmdText);

利用 SQL 語句生成操作命令

if(!m_pRs.Execute(&cmd)) // 使用 SQL 語句生成記錄源

執行這個操作后,數據表就是有效的了。

2,OnPrev和OnNext是相似的,拿OnPrev來解釋就行了

if(!m_pRs.IsOpen()) //數據庫沒打開

return ;

if(m_pRs.IsBOF()) //到頂了

return ;

上面代碼先檢查數據庫是否有效,已經表指針是否已經到頂了

if(0 == nRecordIndex_)

return ;

nRecordIndex有點特別,其實是一個輔助變量,主要是表頭(BOF)和表尾(EOF)跟真實記錄間會有一個記

錄的間隔,所以使用 nRecordIndex作輔助判斷。

nRecordIndex_ --;

向前一個記錄, nRecordIndex減1

m_pRs.MovePrevious();

表指針向前移一個記錄

GetCurrentVal();

設置當前記錄的數據

進階 關于ado庫的原理 :

這個庫其實是對于 Microsoft ADO Data Control 一個封裝,它的本質還是 Microsoft ADO Data Control 。只是它把這個組件中一些晦澀的功能函數變成一個簡單易懂的函數,而且使用起來更靈活。基本上 Microsoft ADO Data Control 能做到的東西,它都能做到, Microsoft ADO Data Control 不方便做的東西,它做起來要更方便一些。以 CADODatabase 類為例,它里面的核心就是: _ConnectionPtr m_pConnection !

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的一个简单而又灵活的数据库操作类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。