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

VC++ ADO 開發實戰(一):從零開始掌握 ADO 資料庫程式設計

     編輯:VC 教學

ADO 簡介:簡單、強大、建立於 OLE DB 之上

ADO (ActiveX Data Objects) 是微軟推薦的高階資料存取介面,封裝 OLE DB 底層細節,比 ODBC/DAO/RDO 更易用且不失彈性。本文帶你從零建立第一個 ADO 應用。

核心流程四步驟

  1. 初始化 COM 库,引入 ADO 型別庫
  2. 用 Connection 物件連接資料庫
  3. 透過 Command 或 Recordset 執行 SQL、查詢處理資料
  4. 關閉連接、釋放物件、反初始化 COM

環境準備

1. 初始化 COM

// MFC 專案在 CWinApp::InitInstance 中
BOOL CMyApp::InitInstance() {
    AfxOleInit(); // 或非 MFC 環境用 CoInitialize(NULL)
    // ...
}

2. 引入 ADO 型別庫

在 stdafx.h 加入:

#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" \
    no_namespace rename("EOF", "adoEOF")
  • 路徑依實際安裝位置調整
  • rename("EOF", "adoEOF") 避免與 MFC EOF 巨集衝突
  • 編譯警告 C4146 屬已知問題,可忽略

建立連接


_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;

HRESULT hr;
try {
    hr = m_pConnection.CreateInstance(__uuidof(Connection));
    if (SUCCEEDED(hr)) {
        m_pConnection->ConnectionTimeout = 0;
        hr = m_pConnection->Open(
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb",
            "", "", adModeUnknown);
        
        m_pCommand.CreateInstance(__uuidof(Command));
        m_pCommand->CommandTimeout = 5;
        m_pCommand->ActiveConnection = m_pConnection;
    }
}
catch (_com_error& e) {
    CString msg; msg.Format(_T("連線失敗: %s"), e.ErrorMessage());
    AfxMessageBox(msg);
}

關閉連接


if (m_pConnection->State) m_pConnection->Close();
m_pConnection = NULL;

開啟與操作 Recordset


_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));

try {
    m_pRecordset->Open(
        "SELECT * FROM DemoTable",
        m_pConnection.GetInterfacePtr(),
        adOpenDynamic, adLockOptimistic, adCmdText);
}
catch (_com_error* e) {
    AfxMessageBox(e->ErrorMessage());
}

遍歷記錄與欄位存取


while (!m_pRecordset->adoEOF) {
    _variant_t var = m_pRecordset->GetCollect("Name");
    if (var.vt != VT_NULL) CString strName = (LPCTSTR)_bstr_t(var);
    
    var = m_pRecordset->GetCollect("Age");
    if (var.vt != VT_NULL) CString strAge = (LPCTSTR)_bstr_t(var);
    
    m_List.AddString(strName + _T(" --> ") + strAge);
    m_pRecordset->MoveNext();
}

新增、修改、刪除

  • 新增:AddNew() → PutCollect() 賦值 → Update()
  • 修改:定位記錄 → PutCollect() → Update()
  • 刪除:定位記錄 → Delete(adAffectCurrent) → Update()

直接執行 SQL 命令


m_pCommand->CommandText = "DELETE FROM DemoTable WHERE Age > 30";
m_pCommand->Execute(NULL, NULL, adCmdText);

結語

掌握上述核心物件與流程,即可輕鬆開發 ADO 資料庫應用。下篇將深入 BLOB 處理與進階技巧。

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