C 中使用 Oracle的事務與儲存過程

2021-09-07 15:35:59 字數 4219 閱讀 6844

建立表

create table test

(id number,

name varchar2(

10),

*** varchar2(4),

age number,

address varchar2(

200)

);

建立不帶引數的儲存過程

create

orreplace

procedure

proc1

isbegin

insert

into test(id,name,***,age) values

(1,'

moses

','man

',25

);commit

;end

;/

c#**呼叫

protected

void button2_click(object

sender, eventargs e)

create

orreplace

proc2

(v_id

number

,v_name

varchar2)is

begin

insert

into

test(id,name)

values

(v_id,v_name);

commit

;end

;/

c#呼叫

protected

void button1_click(object

sender, eventargs e)

if (string.isnullorempty(this

.textbox3.text))

string or=configurationmanager.connectionstrings["

conn

"].tostring();

oracleconnection oc = new

oracleconnection(or);

oc.open();

oraclecommand om =oc.createcommand();

om.commandtype =commandtype.storedprocedure;

om.commandtext = "

proc2";

om.parameters.add(

"v_id

", oracletype.number).direction =parameterdirection.input;

om.parameters[

"v_id

"].value = this

.textbox2.text.trim();

om.parameters.add(

"v_name

", oracletype.nvarchar).direction =parameterdirection.input;

om.parameters[

"v_name

"].value = this

.textbox3.text.trim();

om.executenonquery();

oc.close();

}

view code

create

orreplace

procedure proc3 (recount out number)is

begin

select

count(*) into reccount from

test;

commit

;end

;/

c#呼叫

protected

void button1_click(object

sender, eventargs e)

view code

應用程式通過針對oracleconnection物件呼叫 begintransaction 來建立oracletransaction物件。對oracletransaction物件執行與該事務關聯的所有後續操作(例如提交或中止該事務)。

oracletransaction的成員主要有:

屬性:connection,指定與該事務關聯的oracleconnection物件;

isolationlevel,指定該事務的isolationlevel;列舉型別,用於對事物的鎖定,取值有chaos、readcommited、readuncommited、repeatableread、serializable、unspecified。

方法:commit,提交sql資料庫事務;

rollback , 從掛起狀態回滾事務;

對何時使用事務來操作有以下初步認識:

對多個表同時進行操作時,其他還有何注意呢?

connection一旦開了乙個事務,則執行的命令就必須和事務相關。

要注意的是,在事務進行中,不能再對同乙個資料庫連線(oracleconnection)再進行事務外的資料的查詢和讀取,

if (trans != null)

madp.selectcommand.transaction = trans;

總結:在事務塊內,如果使用同樣的connection物件查詢,但不指定事務,會報錯,在事務提交後,或者不使用相同的connection的物件查詢,不會報錯。

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.configuration;

using

system.data;

using

oracle.dataaccess.client;

using

system.runtime.interopservices;

using

system.text.regularexpressions;

using

system.diagnostics;

using

system.data.common;

using

system.collections;

namespace

db_server

#region

//連線資料庫所需變數及方法

private

string oracleconstr = ""

;

private oracleconnection conn;//

建立sql連線

private oraclecommand com;//

建立sql命令物件

private oracledatareader dr;//

建立sql資料閱讀器

private oracledataadapter sdr;//

建立sql介面卡

private dataset ds;//

建立資料集

//////

建立資料庫連線並開啟

/// public

void

open()

else

if (conn.state ==connectionstate.broken)

}#region

//事務運算元據庫

//////

提交一組(多條)sql語句運算元據庫

/// ///

sql列表

///執行結果

public

intupdatebatchcommand(arraylist commandstringlist)

m_oratrans.commit();

return

influencerowcount;

}catch

(oracleexception ex)

}#endregion

參考文章

殘陽飛雪, 

c#呼叫oracle儲存過程

joyoung,

c#使用事務操作oracle資料庫

C 中使用 Oracle的事務與儲存過程

建立表 create table test id number,name varchar2 10 varchar2 4 age number,address varchar2 200 建立不帶引數的儲存過程 create orreplace procedure proc1 isbegin inser...

C 中使用Oracle 儲存過程筆記

c 中使用oracle 儲存過程筆記 1.呼叫包含out in out型別引數的儲存過程 儲存過程 flag out integer out 只具備輸出功能 in out 為輸入 輸出型 呼叫方法 oracleparameter retpar new oracleparameter channeli...

Oracle中使用到的函式

1.字串相關 1 查詢字串 insrt函式 對指定字串進行判斷,判斷其是否含有指定的字元 instr 源字串 目標字串 開始位置 第幾次出現 用於模糊查詢以及判斷包含關係 select code,name,dept,occupation from staff where instr code,001...