1. 程式人生 > >VC使用ADO連線Oracle資料庫詳解(含原始碼下載)

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)代表一個和資料來源的連線,以後的資料庫操作都是建立在

這個連線上的。這和 MFC ODBC中建立資料來源的連線的CDatabase資料庫類非常相似,其他功能也非常相似。連線物件提供了對資料庫的操作,但是它不返回資料庫操作之後的記錄集,這是和命令物件不同的一點。

    命令物件(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 型別

也是如此,用來處理 COM中的字串。VARIANT 是一個巨大的  union 聯合體,幾乎包含了所有的資料型別,簡單來說,_variant_t是一個類,封裝了VARIANT 的資料型別,並允許我們簡單地對之進行強制型別轉換。同樣,_bstr_t 是對BSTR 進行了封裝的類。有了這兩個類,開發ADO程式將得到很大的方便。

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中包含了資料庫使用者名稱和密碼,UserIDPassword值可以為空。

       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 ”,其他引數不變 ,有的功能不能實現。