在VC 中使用OCCI

2021-06-18 22:01:32 字數 3927 閱讀 1636

1.

簡介

在windows

下訪問oracle

資料庫可以使用

ado,ado.net,oledb,odbc,

跨平台的

occi

等方法,

其中速度最快,對

oracle

支援最完整的是

oracle

提供的occi.

2.

安裝occi sdk

occi sdk

包含在oracle

客戶端中,在如下位置可以找到:

標頭檔案:

c:\oracle\ora92\oci\include

庫檔案:

c:\oracle\ora92\oci\lib\msvc

推薦安裝

oracle

即時客戶端(

instant client

),它也包含有

occi sdk。

標頭檔案:

instantclient_10_2\sdk\include

庫檔案:

instantclient_10_2\sdk\lib\msvc

3.

編譯occi

程式

關於在vc

下如何編譯,除錯

occi

程式,參見《

vc++除錯occi程式的關鍵設定》

4.occi

程式設計步驟

4.1 

連線到資料庫

//建立

occi

上下文環境

environment

*env

=environment

::createenvironment

();assert

(env

!=null);

//建立資料庫連線

connection

*conn

=env

->

createconnection

("uid"

,"pwd"

,"oracle_svr_name"

);//...

// todo:

插入自己的** //

關閉連線

env->

terminateconnection

(conn);

//釋放

environment

::terminateenvironment

(env);

4.2 

執行基本的

sql語句

//建立

sql語句控制控制代碼

statement

*stmt

=conn

->

createstatement

();a.

執行一般的

sql語句

stmt

->

executeupdate

("create table basket_tab (fruit varchar2(30), quantity number)");

stmt

->

executeupdate

("delete basket_tab");

b.

重複利用

sql語句

,引數化的

sql語句

//:1,:2

是引數佔位符

stmt

->

setsql

("insert into basket_tab values(:1,:2)");

// 第乙個引數

stmt

->

setstring

(1,"bananas"

);// 

第二個引數

stmt

->

setint

(2,5);

stmt

->

executeupdate

();

c.

一次修改多行資料

//最多允許的迭代次數,注意這個引數需要在

set***

系列函式之前執行

stmt

->

setmaxiterations

(int

maxiterations

);//

指定某個引數的大小,

string

和byte需要

stmt

->

setmaxparamsize

(int

parameterindex

,int

maxparamsize

);for

(...)

stmt

->

executeupdate

();

d.

執行查詢:獲取結果集

(記錄集

)

resultset*rs

=stmt

->

executequery

("select * from basket_tab"

);while(rs

->

next

())

//關閉結果集

stmt

->

closeresultset(rs

); e.

執行儲存過程

//指定儲存過程

countfruit

stmt

->

setsql

("begin countfruit(:1, :2); end:");

//設定第乙個引數

stmt

->

setstring

(1,);

intquantity;//

註冊輸出引數

stmt

->

registeroutparam

(2,type

::occiint

,sizeof

(quantity

));//

執行此儲存過程

stmt

->

executeupdate

();

//釋放

sql語句控制控制代碼

conn

->

terminatestatement

(statement

*stmt

);4.3 

事務

所有的ddl

預設開始並自動提交乙個事務

所有的dml預設開始乙個事務,且不會自動提交 //

可以指定

dml是否自動提交

stmt

->

setautocommit

(true

/false);

//也可以手動提交或回滾。

conn

->

commit

();

conn

->

rollback

();

4.4 

異常處理

try

catch

(sqlexception

&sqlexcp)

catch

(exception

&excp

)

在VC中使用CCheckListBox

在軟體應用中經常會遇到需要複選功能的列表框。類cchecklistbox實現了windows複選列表框。複選列表框顯示項的乙個列表,例如檔名列表。列表中的每項都有乙個核取方塊,方便使用。但是vc的控 件列表中並新增cchecklistbox,因此在使用cchecklistbox還要進行一些手動設定,...

在VC中使用Debug

選定debug編譯選項 build set active configuration win32 debug 或者在build工具欄上的listbox中選擇debug。debug定義了 debug巨集,而release定義了ndebug巨集。先按f12編譯browse資訊 這樣編譯後可以查到變數定義...

在VC中使用GDI

gdi 可應用於二維向量圖象,柵格圖象及排版,是為c c 程式設計師而設計的表現為c 類而存在的介面,能用於一切基於windows的應用中。作為gdi的後繼者,gdi 在gdi中增加了新功能,如文字的反鋸齒,漸變筆刷,alpha溶合 也優化了gdi許多已有的功能。此外,gdi 改變了程式設計模式,使...