在ADO.NET中使用Oracle儲存程式(轉)

post0發表於2007-08-14
在ADO.NET中使用Oracle儲存程式(轉)[@more@]

  隨著近來 的釋出,.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一樣很方便。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-957100/,如需轉載,請註明出處,否則將追究法律責任。

相關文章