隨著近來
NET Managed Provider For Oracle 的發布
NET開發人員最終擁有一套通過使用ADO
NET來快速訪問Oracle數據庫的方法
在 前一章節 裡
我討論了如何使用Oracle管理提供者來連接和執行SQL數據庫
現在讓我們看看如何在Oracle存儲程序中使用一個新的管理提供者
可能和你以前的方法不一樣
如果你習慣於SQL服務器程序的開發
你會發覺Oracle數據庫世界裡是另一番天地
當運行SQL服務器程序時
訪問SQL查詢結果的過程正如把一個數據賦予DataReader
DataSet等那樣的簡單
這一過程和存儲程序的運行大致一樣
因為當一個命令執行時
SQL服務器程序就會返回結果
表A中的代碼運行了一個名為sp_persons的存儲程序並把結果存放到DataSet
表A代碼如下
Listing A
Dim connectionString As String Dim sqlString As String Dim dataAdapter As System
Data
SqlClient
SqlDataAdapter; connectionString =
server= test;uid=test;pwd=test;database=
test
dbo
sqlString =
sp_persons
dataAdapter = New System
Data
SqlClient
SqlDataAdapter(sql
connectionString) Dim ds As New DataSet() dataAdapter
Fill(ds
Persons
)
Oracle沒有遵循SQL服務器的返回數據模式
一個Oracle查詢的結果以一個指針的形式返回
這一指針也是作為Oracle存儲程序的一個輸出參數
所以當從
NET訪問Oracle數據庫時
你必須指定一個參數來指向指針
利用OracleParameter生成參數
你可以充分利用System
Data
OracleClient
OracleParameter類
這些類能夠處理輸出和輸入參數
並生成和配置參數
OracleCommand類包含一個能夠初始化參數對象的參數屬性
表B范例如下
Listing B
Dim conn As New OracleConnection() Dim comm As New OracleCommand() Dim pOutput As OracleParameter Dim dr As OracleDataReader conn
ConnectionString =
data source=oracle
server;user id=test;password=test
comm
CommandText =
DATABASE
STORED_PROCEDURE_NAME
comm
CommandType = CommandType
StoredProcedure pOutput = comm
Parameters
Add(
pcur
OracleClient
OracleType
Cursor) pOutput
Direction = ParameterDirection
Output comm
Connection = conn conn
Open() dr = comm
ExecuteReader()
表B范例中
我建立了一個Oracle連接和使用了一個存儲程序作為命令
對比表A和表B
我們可以注意到命令類型必須設置為StoredProcedure
缺省情況下是文本
這對SQL的執行是非常有好處的
一旦命令和連接建立起來
必須添加一個輸出參數來接收從存儲程序中返回的指針
添加OracleParameter對象的過程需要類型(如指針)和名字上的匹配
可能的設置包括
Input
Output
InputOutput
or ReturnValue
在這個范例中
指針接受了存儲程序的輸出
所以我把它的Direction設置為Output
最後
我打開了OracleDataReader以獲得命令的結果
存儲程序的數據傳遞
存儲程序通常會接受一個或多個輸出數據
這些數據用於控制程序的結果
例如
你不必需要從數據庫返回每一個記錄
相反
你只需返回一個與輸出結果相匹配的記錄
OracleParameter對象提供了這樣的功能
表C演示了使用一個OracleParameter對象生成一個輸入參數的方法
這裡我建立一個參數的Direction屬性為Input
OracleType enum定義了所有的Oracle數據類型
比如char
byte
DateTime
Float
Number等等
微小的問題也會導致嚴重錯誤的產生
很多開發人員都已經習慣了數據庫系統的程序開發
但是
從一個系統向另一個系統的轉換會引起很多的麻煩
你必須清楚地理解各個數據庫系統
這樣才能更好地編寫源代碼
SQL服務器程序與Oracle之間的主要區別在於從存儲程序的不同返回方式
使用Oracle指針與使用OracleParameter一樣很方便
From:http://tw.wingwit.com/Article/program/Oracle/201311/18268.html