首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VC++6.0 從 Oracle 9i 遷移至 Access 2007 的 ADO 連接範例

     編輯:程式設計綜合問答

遷移需求

將 VC++6.0 專案原使用 Oracle 9i 的資料庫連接改為 Access 2007,採用 ADO (ActiveX Data Objects) 配合 COM 介面操作。

關鍵步驟

  1. 初始化 COM 庫:CoInitialize(NULL)。
  2. 導入 ADO 型別庫:#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" rename("EOF", "adoEOF")。
  3. 建立連接字串:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=你的.mdb路徑(Access 2007 亦可用 Microsoft.ACE.OLEDB.12.0)。
  4. 使用 _ConnectionPtr、_RecordsetPtr 智慧指標管理資源,執行 SQL 查詢並遍歷結果集。

完整代碼範例

#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" rename("EOF", "adoEOF")
using namespace ADODB;

BOOL ADOConnect(CString strDBFile) {
    _ConnectionPtr pConnection;
    if (FAILED(pConnection.CreateInstance(__uuidof(Connection)))) return FALSE;

    CString strConnect;
    strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"), strDBFile);
    if (FAILED(pConnection->Open(_bstr_t(strConnect), "", "", adModeUnknown))) {
        return FALSE;
    }

    _RecordsetPtr pRecordset;
    if (FAILED(pRecordset.CreateInstance(__uuidof(Recordset)))) {
        pConnection->Close();
        return FALSE;
    }

    CString strSql = _T("SELECT * FROM info");
    HRESULT hr = pRecordset->Open(_bstr_t(strSql), _variant_t((IDispatch*)pConnection, TRUE),
                                  adOpenUnspecified, adLockUnspecified, adCmdUnknown);
    if (FAILED(hr)) {
        pConnection->Close();
        return FALSE;
    }

    _variant_t vt;
    pRecordset->MoveFirst();
    while (!pRecordset->adoEOF) {
        vt = pRecordset->Fields->GetItem(_T("姓名"))->Value;
        // 處理 vt...
        pRecordset->MoveNext();
    }

    pConnection->Close();
    return TRUE;
}

注意事項

  • Access 2007 (.accdb) 需安裝 Microsoft Access Database Engine 2010 Redistributable 並使用 Microsoft.ACE.OLEDB.12.0 Provider。
  • 錯誤處理建議使用 _com_error 捕獲 COM 異常。
  • 記得在程式結束前呼叫 CoUninitialize()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved