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

VC++ 使用 ADO 連接資料庫完整實作指南

     編輯:VC 教學

前言

ActiveX Data Objects (ADO) 是 OLE DB 之上的高階資料存取介面,提供簡單且強大的資料庫操作模型。在 Visual C++ 6.0 中透過 #import 引入 ADO 型別庫,搭配智慧指標 (_ConnectionPtr、_RecordsetPtr) 即可輕鬆實現資料庫連線、查詢與資料綁定。本文將完整說明從專案設定到核心程式碼的實作細節。

專案環境建置

1. 初始化 COM 程式庫

在應用程式類別的 InitInstance 中呼叫 AfxOleInit() 初始化 OLE/COM 環境,因為 ADO 是以 COM 元件實作。

2. 引入 ADO 型別庫

在 stdafx.h 中加入:

#include <comdef.h>
#import "C:\Program Files\Common Files\System\ado\msado15.dll" \
    no_namespace \
    rename("EOF", "adoEOF")
  • comdef.h 提供 _variant_t、_bstr_t 等 COM 輔助類別
  • no_namespace 避免命名空間衝突
  • rename("EOF", "adoEOF") 解決與其他庫的 EOF 衝突

核心程式碼實作

1. 宣告智慧指標

在對話框或視圖類別標頭檔中宣告:

_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
CListCtrl m_List; // 用於顯示查詢結果

2. 開啟連線與查詢

在 OnInitDialog 中實作:

BOOL CAboutDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    _variant_t TheValue;
    m_List.ResetContent();

    try
    {
        // 建立連線與記錄集實例
        m_pConnection.CreateInstance(__uuidof(Connection));
        m_pRecordset.CreateInstance(__uuidof(Recordset));

        // 開啟 ODBC 資料來源
        m_pConnection->Open(_T("DSN=ADOTest"), _T(""), _T(""), 0);

        // 執行 SQL 查詢
        m_pRecordset->Open(_T("SELECT * FROM BlockDefine"),
            _variant_t((IDispatch*)m_pConnection),
            adOpenDynamic, adLockOptimistic, adCmdText);

        // 遍歷記錄集
        while (!m_pRecordset->adoEOF)
        {
            TheValue = m_pRecordset->GetCollect(_T("BlockIndex"));
            if (TheValue.vt != VT_NULL)
                m_List.AddString((char*)_bstr_t(TheValue));
            m_pRecordset->MoveNext();
        }

        m_pRecordset->Close();
        m_pConnection->Close();
    }
    catch (_com_error &e)
    {
        AfxMessageBox(e.ErrorMessage());
    }

    m_pRecordset = NULL;
    m_pConnection = NULL;
    return TRUE;
}

關鍵技術點

  • 智慧指標自動管理參考計數:_ConnectionPtr、_RecordsetPtr 在離開作用域時自動釋放,減少記憶體洩漏風險。
  • 資料型別轉換:使用 _variant_t 封裝 VARIANT,_bstr_t 處理 BSTR 字串,簡化 COM 與 C++ 型別互轉。
  • 異常處理:捕捉 _com_error 可取得詳細的 HRESULT 錯誤描述。

執行前準備

須在控制台「ODBC 資料來源管理員」中建立名為 ADOTest 的系統 DSN,指向目標 Access 資料庫 (如 data.mdb),並確認資料表 BlockDefine 含有 BlockIndex 欄位。

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