VC使用ADO連線Oracle資料庫詳解(含原始碼下載)
ADO 主要物件介紹
ADO物件包括:連線物件(Connection Object)、命令物件 (Command Object) 、記錄集對象(RecordSet Object)、欄位物件(Field Object) 、記錄物件(Record Object) 、錯誤物件(ErrorObject)、引數物件(Parameter Object) 、屬性對(Property Object)和流物件(Stream Object) 。其中最為重要的3 個物件是連線物件、命令物件和記錄集物件。
連線物件(Connection Object)代表一個和資料來源的連線,以後的資料庫操作都是建立在
命令物件(Command Object)用來處理資料庫的一些操作,在某些方面具有和連線物件相同的功能。例如都可以執行標準的SQL 語句以及儲存過程,不過命令物件可以返回帶有記錄集的結果。
記錄集物件(RecordSet Object)代表了一個記錄集,和MFC ODBC中的CRecordset 記錄集類有些相似,用來訪問記錄集。記錄集物件能方便地實現記錄的新增、修改和刪除操
在使用這3 個物件的時候,需要定義與之對應的3 個智慧指標,分別為:_ConnectionPtr、
_CommandPtr 和_RecordsetPtr ,然後呼叫它們的CreateInstance方法例項化,從而建立這3
個物件的例項。
_bstr_t 和_variant_t 類
在利用ADO進行資料庫開發的時候,_bstr_t 和_variant_t兩個類很有用,省去了許多BSTR 和VARIANT 型別轉換的麻煩。COM程式設計不使用CString類,因為COM必須設計成跨平臺,它需要一種更普遍的方式來處理字串以及其他資料型別,這也是VARIANT 變數資料型別的來歷。BSTR 型別
ADO連線Oracle資料庫
1.引入ADO庫
在Visual C++中使用ADO開發資料庫之前,需要引入 ADO庫。可以在 StdAfx.h 檔案
末尾處引入ADO庫檔案,方法如下:
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
#pragma warning(disable:4146)
使用預處理指令 import使程式在編譯過程中引入ADO動態庫(msado15.dll)。
no_namespace表明不使用命令空間。“rename("EOF","adoEOF")”表明把ADO中用到的EOF 改為adoEOF,防止發生命名衝突。
2.初始化COM庫
在MFC中的App類的InitInstance()函式中加入
CoInitialize(NULL);//表示com庫的初始化
或者AfxOleInit();
滑鼠右鍵點選建立類嚮導(或者按Ctrl+w)新增函式ExitInstance(),在其中加入程式碼
CoUninitialize();//釋放com庫。
3.建立資料來源
進入 控制面板—>管理工具—>資料來源—>系統DNS
點選新增,選擇Oracle in OraDb10g_home1,不同的oracle版本安裝的in後面的可能不一樣,填寫正確。點選OK完成。
(這裡大家可以在網上找找帶圖片的資料新增)
4.連線資料庫
建立資料庫的連線需要使用連線物件(Connection Object)。首先定義一個 _ConnectionPtr型別的指標,程式碼如下:
_ConnectionPtr m_pConnection;
然後呼叫CreateInstance方法例項化,程式碼如下:
m_pConnection.Crea teInstance( _uuidof(Con nection));
呼叫Connection物件的Open方法建立資料庫的連線,Open函式的原型如下:
HRESULT Open (
_bstr_t Con nectionStri ng,
_bstr_t Use rID,
_bstr_t Pas sword,
long Option s );
其中ConnectionString是一個包含連線資訊的字串,UserID是訪問資料庫的使用者名稱稱,Password是訪問資料庫的密碼,Options為可選引數。如果在連線字串ConnectionString中包含了資料庫使用者名稱和密碼,UserID和Password值可以為空。
ADO可以連線許多資料庫供應商提供的資料來源,儘管這些供應商有自己不同的特點,但是ADO使用相同的程式設計模型,這也是 ADO強大和靈活的一個地方。現在構造一個可以連線Oracle資料庫的連線字串ConnectionString,利用Oracle提供的OLE DB 資料供應商(Oracle Provider for OLE DB),其典型的連線語句為“Provider=OraOLEDB.Oracle.1;DataSource=serverName;User ID=MyUserID; Password= MyPassword”。其中 DataSource是本地服務名,也就是資料來源。資料庫本地服務名為 ORCL,資料庫使用者名稱為 db1,密碼為 db1的連線資料來源的程式碼如下:
try
{
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection.CreateInstance(_uuidof(Recordset));
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect=_T("Provider=OraOLEDB.Oracle.1;Password=tiger;User ID=scott;Data Source=orcl;Persist Security Info=true");
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("資料庫連線失敗!\r\n錯誤資訊:%s", e.ErrorMessage());
AfxMessageBox(errormessage);
}
程式碼中使用了try 和catch來處理COM異常,如果不處理,ADO的異常有可能使程式崩潰,所以一定要記得捕捉_com_error 異常。程式碼中使用的OLEDB供應商為Oracle Provider for OLE DB,如果採用微軟提供的供應商 Microsoft OLEDB Provider for Oracle 的驅動程式,即“Provider=MSDAORA.1 ”,其他引數不變 ,有的功能不能實現。