在傳統 VC++ (MFC/ATL) 專案中,透過 ADO (ActiveX Data Objects) 搭配 OLE DB Provider 是連接異構資料庫的常用手法。本文提供連接 Oracle (MSDAORA) 與 SQL Server (SQLOLEDB) 的最小化程式碼範本。
CoInitialize(NULL) 初始化 COM 库。_ConnectionPtr 智慧指標。ConnectionString。Open(),處理 _com_error 例外。Close() 並 CoUninitialize()。_ConnectionPtr m_pConn;
CString m_sConn = "Provider=MSDAORA.1;Data Source=ORCL;"; // ORCL 為 tnsnames 別名
// 或使用 IP: Provider=MSDAORA.1;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.9)(PORT=1521))(CONNECT_DATA=(SID=ORCL)));
m_pConn.CreateInstance(__uuidof(Connection));
try {
HRESULT hr = m_pConn->Open((_bstr_t)m_sConn, "scott", "tiger", adConnectUnspecified);
if (FAILED(hr)) {
AfxMessageBox(_T("無法連接 Oracle 資料庫!"));
return FALSE;
}
// 連線成功,可執行 SQL...
}
catch (_com_error &e) {
AfxMessageBox(_T("資料庫連線錯誤:") + e.ErrorMessage());
return FALSE;
}
_ConnectionPtr m_pConn;
CString m_sConn = "Provider=SQLOLEDB.1;Data Source=192.168.3.9;Initial Catalog=MyDB;";
m_pConn.CreateInstance(__uuidof(Connection));
try {
HRESULT hr = m_pConn->Open((_bstr_t)m_sConn, "sa", "password", adConnectUnspecified);
if (FAILED(hr)) {
AfxMessageBox(_T("無法連接 SQL Server!"));
return FALSE;
}
}
catch (_com_error &e) {
AfxMessageBox(_T("錯誤:") + e.ErrorMessage());
return FALSE;
}
Data Source:Oracle 可用 TNS 別名或完整描述字串;SQL Server 則為伺服器 IP/主機名,Initial Catalog 指定資料庫名稱。_com_error,透過 ErrorMessage() 取得詳細 OLE DB 錯誤描述。#import "msado15.dll" no_namespace rename("EOF", "adoEOF") 導入 ADO 型別庫。