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

ADO 程式設計入門:三大核心介面、基本流程與 VC++ 實作範例

     編輯:關於SqlServer

ADO 三大核心介面

介面功能適用場景
_ConnectionPtr建立資料庫連線、執行無回傳結果 SQL(DDL、Stored Procedure)全域連線物件,重複使用
_CommandPtr執行回傳記錄集的 SQL/預存程序,支援參數綁定單次或少數查詢,可獨立連線字串
_RecordsetPtr完整記錄集控制:游標類型、鎖定模式、導航、篩選、書籤複雜資料操作、UI 綁定、批次更新

基本程式流程

  1. 初始化 COM Library(AfxOleInit() 或 CoInitialize())
  2. #import 引入 ADO 型別庫(msado15.dll)
  3. 建立 _ConnectionPtr,呼叫 Open() 連線
  4. 透過 _CommandPtr 或 _RecordsetPtr 執行 SQL/取得記錄集
  5. 處理資料(讀取/新增/修改/刪除)
  6. 關閉連線、釋放物件、CoUninitialize()

VC++ 關鍵程式碼片段

1. 初始化 COM 與匯入型別庫

// stdafx.h
#import "c:\program files\common files\system\ado\msado15.dll" \
    no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF")

2. 建立連線

_ConnectionPtr m_pConnection;
HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection));
_bstr_t strConn = "Provider=SQLOLEDB; Server=MyServer; Database=MyDB; uid=sa; pwd=pwd;";
try {
    m_pConnection->Open(strConn, "", "", adConnectUnspecified);
} catch (_com_error &e) {
    AfxMessageBox(e.Description());
}

3. 開啟記錄集並讀取

_RecordsetPtr pRs;
pRs.CreateInstance(__uuidof(Recordset));
pRs->Open(_variant_t("SELECT * FROM Users"),
          _variant_t((IDispatch*)m_pConnection),
          adOpenKeyset, adLockOptimistic, adCmdText);

while (pRs->adoEOF == VARIANT_FALSE) {
    CString name = (LPCSTR)(_bstr_t)pRs->Fields->GetItem("UserName")->Value;
    // 處理資料...
    pRs->MoveNext();
}

4. 修改資料

pRs->Fields->GetItem("Address")->Value = _bstr_t("新地址");
pRs->Update();

進階主題(略)

  • 參數化 Command、預存程序呼叫
  • 游標類型(Static/Keyset/Dynamic/ForwardOnly)與鎖定模式選擇
  • 交易控制:BeginTrans/CommitTrans/RollbackTrans
  • 事件通知:ConnectionEvents、RecordsetEvents
  • 資料繫結、篩選、排序、書籤導航

三種開發方式比較

  1. #import 智慧指標:開發效率最高,程式碼最清晰,推薦首選
  2. ColeDispatchDriver 派生類:次之,適合不想用 #import 專案
  3. 純 COM API:效能最好、體積最小、控制力最強,但開發極繁瑣
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved