本文討論了如何使用 ADO
您可以使用以下托管數據提供程序連接到 Oracle 數據庫
Oracle
概述
PL/SQL 是 SQL 的 Oracle 實現
類
可使用 System
類 說明
OracleCommand
針對 Oracle 數據庫執行的存儲過程的 SQL 語句
OracleConnection
打開的數據庫連接
OracleParameter
OracleCommand 的參數
OracleParameterCollection
OracleParameter 對象的集合
OracleType
Oracle 數據類型和結構的枚舉
執行存儲過程
執行 Oracle 存儲過程與執行 SQL Server 存儲過程類似
在 HR 架構中創建一個名為 COUNT_JOB_HISTORY 的存儲過程
CREATE OR new PROCEDURE COUNT_JOB_HISTORY
(
reccount OUT NUMBER
)
IS
BEGIN
SELECT COUNT(*) INTO reccount
FROM JOB_HISTORY;
END COUNT_JOB_HISTORY;
HR 架構是默認 Oracle 安裝中包含的一個示例
將 System
使用 using 指令導入 OracleClient 類中的類型
using System
創建一個 OracleConnection 對象
OracleConnection conn = new OracleConnection(
User Id=UserID;Password=Password;
用您的值替換 Oracle 數據庫的名稱
創建一個 OracleCommand 對象
OracleCommand cmd = new OracleCommand();
cmd
cmd
cmd
如果您的存儲過程名稱含有特殊字符
創建輸入
cmd
ParameterDirection
該行代碼是以下兩行代碼的簡寫形式
cmd
cmd
如果您要檢索結果集
使用 OracleCommand 對象的一個 Execute 方法打開連接並執行存儲過程
方法 說明
ExecuteReader
通過執行能夠返回結果集的存儲過程生成 OracleDataReader
ExecuteNonQuery
執行不返回結果集的查詢或過程
ExecuteOracleNonQuery
執行查詢
該方法還使用 OracleString 參數來返回 UPDATE
ExecuteScalar
執行一個查詢或過程
ExecuteOracleScalar
執行一個查詢或過程
使用完連接後
conn
cmd
conn
如果您要使用 DataAdapter 來填充 DataTable 或 DataSet
處理結果
Console
下面是在本示例中開發的用於執行存儲過程和檢索結果的代碼
OracleConnection conn = new OracleConnection(
User Id=UserID;Password=Password;
OracleCommand cmd = new OracleCommand();
cmd
cmd
cmd
cmd
ParameterDirection
conn
cmd
conn
Console
不返回數據的存儲過程
OracleCommand 類的 ExecuteOracleNonQuery() 方法用於執行不返回任何行的 SQL 語句或存儲過程
還可以使用 OracleCommand 類的 ExecuteNonQuery() 方法來執行不返回數據的存儲過程
盡管上述命令都不會返回任何數據
以下 Oracle 存儲過程刪除了由單個輸入參數指定的員工的所有工作經歷
CREATE OR new PROCEDURE DELETE_JOB_HISTORY
(
p_employee_id NUMBER
)
IS
BEGIN
DELETE FROM job_history
WHERE employee_id = p_employee_id;
END DELETE_JOB_HISTORY;
以下代碼運行了該存儲過程
// create the connection
OracleConnection conn = new OracleConnection(
User Id=UserID;Password=Password;
// create the command for the stored procedure
OracleCommand cmd = new OracleCommand();
cmd
cmd
cmd
// add the parameter specifying the employee for whom to delete records
cmd
OracleString rowId;
// execute the stored procedure
conn
int rowsAffected = cmd
conn
Console
如果您尚未修改默認的 HR 安裝
Rows affected:
訪問返回值
RETURN 語句立即將控制從存儲過程返回到調用程序
Oracle 函數是計算並返回單個值的子程序
下面是一個返回指定員工的電子郵件的函數
CREATE OR new FUNCTION GET_EMPLOYEE_EMAIL (
p_employee_id NUMBER
)
RETURN VARCHAR
IS p_email VARCHAR
BEGIN
SELECT EMAIL INTO p_email FROM EMPLOYEES
WHERE EMPLOYEE_ID = p_employee_id;
RETURN p_email;
END GET_EMPLOYEE_EMAIL;
執行函數的方式與執行存儲過程的方式相同
// create the connection
OracleConnection conn = new OracleConnection(
User Id=UserID;Password=Password;
// create the command for the function
OracleCommand cmd = new OracleCommand();
cmd
cmd
cmd
// add the parameters
// the return value
cmd
cmd
ParameterDirection
// execute the function
conn
cmd
conn
// output the result
Console
控制台輸出顯示了員工
Email address is: NKOCHHAR
結果集與 REF CURSOR
可使用 REF CURSOR 數據類型來處理 Oracle 結果集
包
PL/SQL 和 T
· 規范
· 正文
每個存儲過程或函數的參數都出現在括號內
· IN
· OUT
· INOUT
每個參數也都被標記以指示數據類型
以下包規范定義了四個過程
CREATE OR new PACKAGE CRUD_LOCATIONS AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetLocations (cur_Locations OUT T_CURSOR);
PROCEDURE UpdateLocations (p_location_id IN NUMBER
p_street_address IN VARCHAR
p_postal_code IN VARCHAR
p_city IN VARCHAR
p_state_province IN VARCHAR
p_country_id IN CHAR);
PROCEDURE DeleteLocations (p_location_id IN NUMBER);
PROCEDURE InsertLocations (p_location_id OUT NUMBER
p_street_address IN VARCHAR
p_postal_code IN VARCHAR
p_city IN VARCHAR
p_state_province IN VARCHAR
p_country_id IN CHAR);
END CRUD_LOCATIONS;
以下代碼摘自上述包規范的包正文
CREATE OR new PACKAGE BODY CRUD_LOCATIONS AS
PROCEDURE GetLocations (cur_Locations OUT T_CURSOR)
IS
BEGIN
OPEN cur_Locations FOR
SELECT * FROM LOCATIONS;
END GetLocations;
END CRUD_LOCATIONS;
使用 DataReader
可以通過調用 OracleCommand 對象的 ExecuteReader() 方法來創建 OracleDataReader
CREATE OR new PACKAGE SELECT_JOB_HISTORY AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetJobHistoryByEmployeeId
(
p_employee_id IN NUMBER
cur_JobHistory OUT T_CURSOR
);
END SELECT_JOB_HISTORY;
包正文定義了一個過程
CREATE OR new PACKAGE BODY SELECT_JOB_HISTORY AS
PROCEDURE GetJobHistoryByEmployeeId
(
p_employee_id IN NUMBER
cur_JobHistory OUT T_CURSOR
)
IS
BEGIN
OPEN cur_JobHistory FOR
SELECT * FROM JOB_HISTORY
WHERE employee_id = p_employee_id;
END GetJobHistoryByEmployeeId;
END SELECT_JOB_HISTORY;
以下代碼執行該過程
// create connection
OracleConnection conn = new OracleConnection(
User Id=UserID;Password=Password;
// create the command for the stored procedure
OracleCommand cmd = new OracleCommand();
cmd
cmd
cmd
// add the parameters for the stored procedure including the REF CURSOR
// to retrieve the result set
cmd
cmd
ParameterDirection
// open the connection and create the DataReader
conn
OracleDataReader dr = cmd
// output the results and close the connection
while(dr
{
for(int i =
Console
Console
}
conn
From:http://tw.wingwit.com/Article/program/net/201311/13776.html