国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

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

2024-08-29 13:38:59
字體:
供稿:網(wǎng)友

  隨著近來 .NET Managed PRovider For Oracle 的發(fā)布,.NET開發(fā)人員最終擁有一套通過使用ADO.NET來快速訪問Oracle數(shù)據(jù)庫的方法。在 前一章節(jié) 里,我討論了如何使用Oracle治理提供者來連接和執(zhí)行SQL數(shù)據(jù)庫。現(xiàn)在讓我們看看如何在Oracle存儲程序中使用一個新的治理提供者。
  
  可能和你以前的方法不一樣
  
  
  假如你習慣于SQL服務器程序的開發(fā),你會發(fā)覺Oracle數(shù)據(jù)庫世界里是另一番天地。當運行SQL服務器程序時,訪問SQL查詢結(jié)果的過程正如把一個數(shù)據(jù)賦予DataReader, DataSet等那樣的簡單。這一過程和存儲程序的運行大致一樣,因為當一個命令執(zhí)行時,SQL服務器程序就會返回結(jié)果。表A中的代碼運行了一個名為sp_persons的存儲程序并把結(jié)果存放到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服務器的返回數(shù)據(jù)模式。一個Oracle查詢的結(jié)果以一個指針的形式返回,這一指針也是作為Oracle存儲程序的一個輸出參數(shù)。所以當從.NET訪問Oracle數(shù)據(jù)庫時,你必須指定一個參數(shù)來指向指針。
  
  利用OracleParameter生成參數(shù)
  你可以充分利用System.Data.OracleClient.OracleParameter類,這些類能夠處理輸出和輸入?yún)?shù),并生成和配置參數(shù)。OracleCommand類包含一個能夠初始化參數(shù)對象的參數(shù)屬性。
  表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的執(zhí)行是非常有好處的。一旦命令和連接建立起來,必須添加一個輸出參數(shù)來接收從存儲程序中返回的指針。添加OracleParameter對象的過程需要類型(如指針)和名字上的匹配。可能的設置包括:Input, Output,InputOutput, or ReturnValue。在這個范例中,指針接受了存儲程序的輸出,所以我把它的Direction設置為Output,最后,我打開了OracleDataReader以獲得命令的結(jié)果。
  
  存儲程序的數(shù)據(jù)傳遞
  存儲程序通常會接受一個或多個輸出數(shù)據(jù),這些數(shù)據(jù)用于控制程序的結(jié)果。例如,你不必需要從數(shù)據(jù)庫返回每一個記錄,相反,你只需返回一個與輸出結(jié)果相匹配的記錄。
  
  OracleParameter對象提供了這樣的功能,表C演示了使用一個OracleParameter對象生成一個輸入?yún)?shù)的方法。這里我建立一個參數(shù)的Direction屬性為Input,OracleType enum定義了所有的Oracle數(shù)據(jù)類型,比如char,byte, DateTime, Float, Number等等。
  
  微小的問題也會導致嚴重錯誤的產(chǎn)生
  很多開發(fā)人員都已經(jīng)習慣了數(shù)據(jù)庫系統(tǒng)的程序開發(fā),但是,從一個系統(tǒng)向另一個系統(tǒng)的轉(zhuǎn)換會引起很多的麻煩,你必須清楚地理解各個數(shù)據(jù)庫系統(tǒng),這樣才能更好地編寫源代碼。
SQL服務器程序與Oracle之間的主要區(qū)別在于從存儲程序的不同返回方式。使用Oracle指針與使用OracleParameter一樣很方便。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 普兰店市| 墨竹工卡县| 高邑县| 和平县| 佛冈县| 高密市| 仪征市| 延津县| 宁夏| 泗水县| 元阳县| 长丰县| 康马县| 镇安县| 德惠市| 邵阳县| 丰顺县| 濮阳市| 天祝| 沂水县| 青阳县| 武隆县| 军事| 宣武区| 三明市| 峡江县| 炎陵县| 綦江县| 长春市| 峨眉山市| 镇赉县| 垫江县| 随州市| 黎平县| 肃南| 高唐县| 尼勒克县| 高阳县| 雷山县| 余庆县| 青阳县|