首页 > 编程 > .NET > 正文

asp.net中调用oracle存储过程的方法

2024-07-10 13:29:20
字体:
来源:转载
供稿:网友

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它,下面给大家介绍下asp.net中调用oracle存储过程的方法,需要的朋友可以参考下

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

不多说了,本文通过两种方法介绍asp.net中调用oracle存储过程的方法,具体内容请看下面代码。

调用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. /// 执行oracle存储过程返回多个结果集 
  3. /// </summary> 
  4. /// <param name="strProcName">存储过程名称</param> 
  5. /// <param name="ResultCount">返回个数</param> 
  6. /// <param name="paras">参数</param> 
  7. /// <returns>任意对象数组</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=数据库;")) 
  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 转为 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;//获取当前行中的列数; 
  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("转换出错出错!", ex); 

调用方法

 

 
  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); 

调用oracle存储过程方法二:

存储过程结构如下:

 

 
  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; 

下面讲一下调用:

表结构

 

 
  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中调用oracle存储过程的全部内容,希望对大家有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表