首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

DAO資料庫程式設計全攻略:MFC封裝與Jet引擎實戰應用

     編輯:關於C語言

一、DAO技術概覽與四大存取模式

DAO (Data Access Objects) 透過程式碼建立與操作資料庫,MFC DAO類別封裝大部分功能,專為Microsoft Jet引擎 (MDB檔案) 設計。支援四種存取模式:

  1. 開啟MDB檔案:自包含資料庫,含查詢、安全性、索引、關聯與資料表
  2. 直接開啟ODBC資料源:限非Jet驅動程式的ODBC資料源
  3. 用Jet引擎開啟ISAM資料源:dBase、FoxPro、Paradox、Btrieve、Excel、文字檔等,即使已建ODBC資料源也須用ISAM方式
  4. 附加外部表到Access資料庫:將ODBC/ISAM表連結至MDB,再以模式1開啟,為存取外部資料首選

二、核心類別與程式設計模式

主要類別

  • CDaoWorkspace:工作區物件,管理交易處理,位於架構最上層
  • CDaoDatabase:資料庫連接物件,兩種建構方式:指定Workspace或隱含建立暫時Workspace
  • CDaoRecordset:記錄集物件,三種類型:Table、Dynaset、Snapshot

三、關鍵操作程式碼範例

1. 開啟資料庫

CDaoDatabase db;
db.Open(_T("test.mdb"), FALSE, FALSE, _T("")); 
// 參數:檔案路徑、唯讀、獨佔、連接字串

2. 查詢記錄 (動態綁定欄位)


COleVariant var;
long id;
CString str;
CDaoRecordset rs(&db);
rs.Open(_T("SELECT ID, Name FROM Users"));

while (!rs.IsEOF()) {
    rs.GetFieldValue(_T("ID"), var); id = V_I4(&var);
    rs.GetFieldValue(_T("Name"), var); str = var.bstrVal;
    // 處理資料...
    rs.MoveNext();
}
rs.Close();

3. 新增記錄 (需注意日期時間處理)


rs.AddNew();
rs.SetFieldValue(_T("UserName"), _T("John"));
rs.SetFieldValue(_T("PointId"), 1001);

// 日期時間需用COleDateTime與COleVariant
COleDateTime dt(2024, 1, 15, 10, 30, 0);
COleVariant varTime(dt);
rs.SetFieldValue(_T("UpdateTime"), varTime);

rs.SetFieldValue(_T("OldValue"), 123.45);
rs.SetFieldValue(_T("NewValue"), 124.56);
rs.Update();

4. 修改記錄


rs.Edit();
rs.SetFieldValue(_T("ColumnName"), _T("NewValue"));
rs.Update();

5. 刪除記錄


rs.Delete();  // 無需呼叫Update()

6. 統計記錄數


// 方法1: 記錄集查詢 (需動態集)
CDaoRecordset rs(&db);
rs.Open(dbOpenDynaset, _T("SELECT COUNT(*) FROM Table"));
COleVariant var;
rs.GetFieldValue(0, var);
long count = V_I4(&var);

// 方法2: CDaoTableDef (最直接)
CDaoTableDef td(&db);
td.Open(_T("TableName"));
long count = td.GetRecordCount();
td.Close();
// 注意:不可用CDaoRecordset::GetRecordCount()

四、重要限制與最佳實務

  • 單執行緒限制:Jet引擎不支援多執行緒,所有DAO呼叫必須限制在主執行緒
  • 資源管理:用完記錄集與資料庫物件必須Close()釋放資源
  • 參數化查詢:同樣支援參數化,提升安全與效能
  • 交易處理:透過CDaoWorkspace::BeginTrans/CommitTrans/Rollback管理

總結

MFC DAO提供操作Jet資料庫的強大且簡潔介面,特別適合桌面應用處理MDB檔案。掌握Workspace/Database/Recordset三層架構、四種存取模式、動態欄位綁定與日期時間處理,即可高效開發資料庫應用。但需嚴守單執行緒限制與資源釋放原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved