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

首頁 > 編程 > .NET > 正文

asp.net中調(diào)用oracle存儲過程的方法

2024-07-10 13:29:20
字體:
供稿:網(wǎng)友

存儲過程是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL 語句集,存儲在數(shù)據(jù)庫中經(jīng)過第一次編譯后再次調(diào)用不需要再次編譯,用戶通過指定存儲過程的名字并給出參數(shù)來執(zhí)行它,下面給大家介紹下asp.net中調(diào)用oracle存儲過程的方法,需要的朋友可以參考下

存儲過程(Stored Procedure)是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL 語句集,存儲在數(shù)據(jù)庫中經(jīng)過第一次編譯后再次調(diào)用不需要再次編譯,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。

存儲過程是數(shù)據(jù)庫中的一個重要對象,任何一個設(shè)計良好的數(shù)據(jù)庫應(yīng)用程序都應(yīng)該用到存儲過程。

不多說了,本文通過兩種方法介紹asp.net中調(diào)用oracle存儲過程的方法,具體內(nèi)容請看下面代碼。

調(diào)用oracle存儲過程方法一:

ORACLE代碼

 

 
  1. CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR,MYCS2 OUT SYS_REFCURSOR,a out varchar)as 
  2. BEGIN 
  3. a:='test'
  4. OPEN MYCS1 FOR 
  5. SELECT 1 from dual; 
  6. OPEN MYCS2 FOR 
  7. SELECT 2 from dual; 
  8.  
  9. END; 

C#代碼

 

 
  1. /// <summary> 
  2. /// 執(zhí)行oracle存儲過程返回多個結(jié)果集 
  3. /// </summary> 
  4. /// <param name="strProcName">存儲過程名稱</param> 
  5. /// <param name="ResultCount">返回個數(shù)</param> 
  6. /// <param name="paras">參數(shù)</param> 
  7. /// <returns>任意對象數(shù)組</returns> 
  8. public object[] ExcuteProc_N_Result(string strProcName, int ResultCount, params OracleParameter[] paras) 
  9. using (OracleConnection conn = new OracleConnection("User ID=用戶名;Password=密碼;Data Source=數(shù)據(jù)庫;")) 
  10. OracleCommand cmd = new OracleCommand(strProcName, conn); 
  11. if (paras != null && paras.Length > 0) 
  12. for (int j = 0; j < paras.Length; j++) 
  13. if (paras[j].Value == null
  14. paras[j].Value = DBNull.Value; 
  15. cmd.Parameters.AddRange(paras); 
  16. cmd.CommandType = CommandType.StoredProcedure; 
  17. conn.Open(); 
  18. cmd.ExecuteNonQuery(); 
  19. int i = 0; 
  20. //int nOutputParametersCount = 0; 
  21. object[] objResult = new object[ResultCount]; 
  22. foreach (OracleParameter p in cmd.Parameters) 
  23. if (p.Direction == ParameterDirection.Output || p.Direction == ParameterDirection.InputOutput) 
  24. if (p.Value is OracleDataReader) 
  25. OracleDataReader reader = p.Value as OracleDataReader; 
  26. objResult[i++] = ConvertDataReaderToDataTable(reader); 
  27. else 
  28. objResult[i++] = p.Value; 
  29. return objResult; 
  30. /// <summary>  
  31. /// 將DataReader 轉(zhuǎn)為 DataTable  
  32. /// </summary>  
  33. /// <param name="DataReader">OleDbDataReader</param>  
  34. protected DataTable ConvertDataReaderToDataTable(OracleDataReader reader) 
  35. DataTable objDataTable = new DataTable("TmpDataTable"); 
  36. try 
  37. int intFieldCount = reader.FieldCount;//獲取當(dāng)前行中的列數(shù); 
  38. for (int intCounter = 0; intCounter <= intFieldCount - 1; intCounter++) 
  39. objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter)); 
  40. //populate datatable  
  41. objDataTable.BeginLoadData(); 
  42. //object[] objValues = new object[intFieldCount -1];  
  43. object[] objValues = new object[intFieldCount]; 
  44. while (reader.Read()) 
  45. reader.GetValues(objValues); 
  46. objDataTable.LoadDataRow(objValues, true); 
  47. reader.Close(); 
  48. objDataTable.EndLoadData(); 
  49. return objDataTable; 
  50. catch (Exception ex) 
  51. throw new Exception("轉(zhuǎn)換出錯出錯!", ex); 

調(diào)用方法

 

 
  1. OracleParameter[] oracleParameter = new OracleParameter[]{ 
  2. new OracleParameter("MYCS1",OracleType.Cursor), 
  3. new OracleParameter("MYCS2",OracleType.Cursor), 
  4. new OracleParameter("a",OracleType.VarChar,200), 
  5. }; 
  6. oracleParameter[0].Direction = ParameterDirection.Output; 
  7. oracleParameter[1].Direction = ParameterDirection.Output; 
  8. oracleParameter[2].Direction = ParameterDirection.Output; 
  9.  
  10. object[] xxx = ExcuteProc_N_Result("gd_CURSOR", 3, oracleParameter); 

調(diào)用oracle存儲過程方法二:

存儲過程結(jié)構(gòu)如下:

 

 
  1. Create or Replace Procedure xx_yy 
  2. i_OrderID in number, 
  3. i_ReturnValue out number 
  4. is 
  5. v_RealValue number; 
  6. v_TotalValue number; 
  7. v_AdvendorID number; 
  8. begin 
  9. 自己寫就行 
  10. end; 

下面講一下調(diào)用:

表結(jié)構(gòu)

 

 
  1. create table ORDERTABLE 
  2. ORDERID NUMBER not null
  3. TEXT NUMBER not null 

存儲過程

 

 
  1. i_OrderID in number, 
  2. i_ReturnValue out number 
  3. is 
  4. spass ordertable.text%type; 
  5. begin 
  6. select text into spass from ordertable where orderid=i_OrderID;  
  7. i_ReturnValue:=spass; 
  8. exception 
  9. when no_data_found 
  10. then i_ReturnValue:=-1;  
  11. end; 

源碼:

 

 
  1. using System.Data .OracleClient ;//(別忘了添加) 
  2. OracleConnection Oraclecon = new OracleConnection ("Password=dloco;User ID=dloco;Data Source=dloco;"); 
  3. OracleCommand myCMD = new OracleCommand(); 
  4. OracleParameter[] parameters = { new OracleParameter("i_OrderID", OracleType.Number, 10),new OracleParameter("i_ReturnValue",OracleType.Number,10 )}; 
  5. parameters[0].Value = 1; 
  6. parameters[1].Direction = ParameterDirection.Output; 
  7.  
  8. myCMD.Connection = Oraclecon; 
  9. myCMD.CommandType = CommandType.StoredProcedure; 
  10. myCMD.CommandText = "dloco.xx_yy"
  11.  
  12. myCMD.Parameters .Add (parameters[0]); 
  13. myCMD.Parameters .Add (parameters[1]); 
  14.  
  15. myCMD.Connection.Open();  
  16.  
  17. myCMD.ExecuteNonQuery();  
  18.  
  19. string result=myCMD.Parameters["i_ReturnValue"].Value.ToString(); 
  20. MessageBox.Show (result); 
  21.  
  22. Oraclecon.Close(); 

以上就是asp.net中調(diào)用oracle存儲過程的全部內(nèi)容,希望對大家有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 勃利县| 鄢陵县| 榆社县| 耒阳市| 会理县| 蓝山县| 深水埗区| 栾川县| 盐城市| 文登市| 安岳县| 靖州| 科尔| 隆昌县| 福贡县| 万载县| 武平县| 和田市| 怀集县| 山东省| 东至县| 咸阳市| 邵武市| 容城县| 延庆县| 双鸭山市| 眉山市| 雷波县| 莱州市| 柳林县| 卢龙县| 定州市| 东源县| 扶绥县| 聊城市| 大荔县| 大同市| 合肥市| 广水市| 哈密市| 区。|