本文我們通過一個Oracle提供的示例來講解利用利用ODP
NET 執行SQL語句訪問數據庫時設置參數
首先創建一個C#應用程序
為了簡單和方便可以創建一個控制台程序
然後第一件事是添加對Oracle ODP
NET的引用
打開項目的解決方案管理頁
然後在引用目錄上點右鍵並選擇添加引用菜單
選擇ORACLE_HOME\bin\Oracle
DataAccesss
dll
為了能夠使用ODP
NET 我們在程序前應該引入相關的命名空間
using Oracle
DataAccess
Client;
using Oracle
DataAccess
Types;
首先需要建立到數據庫的連接
在上一文章中已經講過這方面的基本知識
接下來的工作是建立表
SQL語句為
CREATE TABLE multimedia_tab(thekey NUMBER(
) PRIMARY KEY
story CLOB
sound BLOB)
然後插入一條記錄進行測試
SQL語句為
INSERT INTO multimedia_tab values(
This is a long story
Once upon a time
)
建表和插入記錄都使用OracleCommand 對象的 ExecuteNonQuery方法來執行SQL 語句
在ODP
NET 中使用參數的方法為
◎通過SQL語句創建一個OracleCommand
在SQL語句中參數使用:
:
來代替
分別表示第一個
第二個參數
◎在OracleCommand對象中添加參數
◎設置參數的值
◎調用OracleCommand的ExecuteNonQuery執行SQL語句
◎從參數對象中得到返回的值
下面是代碼
// 創建OracleCommand 對象
OracleCommand cmd = new OracleCommand(
begin select story into :
from multimedia_tab where thekey =
; end;
);
cmd
Connection = con;
//把命令類型設置為Text
表示執行SQL語句
cmd
CommandType = CommandType
Text;
// 添加參數
第一個參數表示參數名稱
第二個參數表示參數類型
OracleParameter param = cmd
Parameters
Add(
clobdata
OracleDbType
Clob);
// 設置參數為輸出類型
如果是輸入參數則設置為
ParameterDirection
InputOutput
param
Direction = ParameterDirection
Output;
// Execute command
try
{
// 執行SQL語句
// 如果是輸入參數
那麼這時SQL中的:
被替換為OracleParameter param 對象所代表的值
cmd
ExecuteNonQuery();
// 因為參數是輸出參數
所以可以通過得到參數的值來獲取SQL語句中參數所表示的值
string lob_data = (string) ((OracleClob)(cmd
Parameters[
]
Value))
Value;
// 顯示結果
Console
WriteLine(
Data is:
+ lob_data);
}
catch (Exception e)
{
Console
WriteLine(e
Message);
}
在執行設置了參數的SQL語句時可以使用ExecuteReader
ExecuteNonQuery
ExecuteScalar 來執行SQL語句
參數的類型可以為
InputOutput
Output
ReturnValue
在ODP
NET中還有一項功能
就是利用數組綁定到參數上來一次性插入多個記錄
這裡講一下多個記錄同時插入時如何綁定一個數組到參數上
// 設置數組
int[] myArrayDeptNo = new int[
]{
};
// 創建OracleCommand 對象
cmd
CommandText =
insert into dept(deptno) values (:deptno)
;
// 設置數組大小
cmd
ArrayBindCount =
;
// 創建參數
OracleParameter prm = new OracleParameter(
deptno
OracleDbType
Int
);
prm
Direction = ParameterDirection
Input;
prm
Value = myArrayDeptNo;
// 添加參數到OracleCommand對象中
cmd
Parameters
Add(prm);
// 執行
這時候有三條記錄被插入
cmd
ExecuteNonQuery();
:
:
otn 對內容進行了修改
------------------------簽----名----
$
)
movb $
x
%ah
int $
x
movw %ax
(
)
movw $SYSSEG
%ax
From:http://tw.wingwit.com/Article/program/Oracle/201311/16992.html