熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

在ADO.NET中使用Oracle存儲程序

2013-11-13 16:24:07  來源: Oracle 

  隨著近來 NET Managed Provider For Oracle 的發布NET開發人員最終擁有一套通過使用ADONET來快速訪問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 SystemDataSqlClientSqlDataAdapter; connectionString = server= test;uid=test;pwd=test;database=testdbo sqlString = sp_persons dataAdapter = New SystemDataSqlClientSqlDataAdapter(sqlconnectionString) Dim ds As New DataSet() dataAdapterFill(ds Persons)
  
  Oracle沒有遵循SQL服務器的返回數據模式一個Oracle查詢的結果以一個指針的形式返回這一指針也是作為Oracle存儲程序的一個輸出參數所以當從NET訪問Oracle數據庫時你必須指定一個參數來指向指針
  
  利用OracleParameter生成參數
  你可以充分利用SystemDataOracleClientOracleParameter類這些類能夠處理輸出和輸入參數並生成和配置參數OracleCommand類包含一個能夠初始化參數對象的參數屬性
  表B范例如下
  Listing B
  
  
  Dim conn As New OracleConnection() Dim comm As New OracleCommand() Dim pOutput As OracleParameter Dim dr As OracleDataReader connConnectionString = data source=oracleserver;user id=test;password=test commCommandText = DATABASESTORED_PROCEDURE_NAME commCommandType = CommandTypeStoredProcedure pOutput = commParametersAdd(pcur OracleClientOracleTypeCursor) pOutputDirection = ParameterDirectionOutput commConnection = conn connOpen() dr = commExecuteReader()
  
  
  
  表B范例中我建立了一個Oracle連接和使用了一個存儲程序作為命令對比表A和表B我們可以注意到命令類型必須設置為StoredProcedure缺省情況下是文本這對SQL的執行是非常有好處的一旦命令和連接建立起來必須添加一個輸出參數來接收從存儲程序中返回的指針添加OracleParameter對象的過程需要類型(如指針)和名字上的匹配可能的設置包括Input OutputInputOutput or ReturnValue在這個范例中指針接受了存儲程序的輸出所以我把它的Direction設置為Output最後我打開了OracleDataReader以獲得命令的結果
  
  存儲程序的數據傳遞
  存儲程序通常會接受一個或多個輸出數據這些數據用於控制程序的結果例如你不必需要從數據庫返回每一個記錄相反你只需返回一個與輸出結果相匹配的記錄
  
  OracleParameter對象提供了這樣的功能表C演示了使用一個OracleParameter對象生成一個輸入參數的方法這裡我建立一個參數的Direction屬性為InputOracleType enum定義了所有的Oracle數據類型比如charbyte DateTime Float Number等等
  
  微小的問題也會導致嚴重錯誤的產生
  很多開發人員都已經習慣了數據庫系統的程序開發但是從一個系統向另一個系統的轉換會引起很多的麻煩你必須清楚地理解各個數據庫系統這樣才能更好地編寫源代碼SQL服務器程序與Oracle之間的主要區別在於從存儲程序的不同返回方式使用Oracle指針與使用OracleParameter一樣很方便
From:http://tw.wingwit.com/Article/program/Oracle/201311/18268.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.