oracle里的存储过程
为什么在C#里调用ORACLE的存储过程那么麻烦?不明白为什么要写包头及包体和游标。为何不像SQL SERVER一样???感觉到ORACLE里写存储过程没有在SERVER里写的爽。有没有人举个简单的C#调用ORACLE存储过程的例子?
------解决方案--------------------OracleConnection conn = new OracleConnection(Connstr); 
 			conn.Open(); 
 			OracleTransaction tx = conn.BeginTransaction(); 
 			OracleCommand cmd = conn.CreateCommand(); 
 			cmd.Transaction = tx; 
 			cmd.CommandText =  "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end; "; 
 			cmd.Parameters.Add(new OracleParameter( "tempblob ", OracleType.Blob)).Direction = ParameterDirection.Output; 
 			cmd.ExecuteNonQuery(); 
 			OracleLob tempLob = (OracleLob)cmd.Parameters[0].Value; 
 			tempLob.BeginBatch(OracleLobOpenMode.ReadWrite); 
 			tempLob.Write(picValue,0,picValue.Length); 
 			tempLob.EndBatch(); 
 			cmd.Parameters.Clear(); 
 			cmd.CommandText =  "PKG_PEPWEB_TransgressMGR.AddTransgressInfo "; 
 			cmd.CommandType = CommandType.StoredProcedure;   
 			cmd.Parameters.Add( new OracleParameter(  "AHPZL ",OracleType.VarChar,2 ) ).Value		= m_HPZL; 
 			cmd.Parameters.Add( new OracleParameter(  "AHPHM ",OracleType.VarChar,15 ) ).Value	= m_HPHM; 
 			cmd.Parameters.Add( new OracleParameter(  "AWFSJ ",OracleType.DateTime ) ).Value		= DateTime.Parse(m_WFSJ); 
 			cmd.Parameters.Add( new OracleParameter(  "ARoadID ",OracleType.VarChar,10 ) ).Value	= m_RoadID; 
 			cmd.Parameters.Add( new OracleParameter(  "Awzxwno ",OracleType.VarChar,200 ) ).Value	= m_WFXW; 
 			cmd.Parameters.Add( new OracleParameter(  "AJCSD ",OracleType.Number,4 ) ).Value		= Decimal.Parse(m_JCSD);		 
 			cmd.Parameters.Add( new OracleParameter(  "APICNAME ",OracleType.VarChar,200 ) ).Value= m_PICNAME; 
 			cmd.Parameters.Add( new OracleParameter(  "ACARSTATE ",OracleType.VarChar,1 ) ).Value = m_CARSTATE; 
 			cmd.Parameters.Add( new OracleParameter(   "AJBR ",OracleType.VarChar,30 ) ).Value	= m_JBR; 
 			cmd.Parameters.Add( new OracleParameter(  "APHOTO ", OracleType.Blob ) ).Value		= tempLob; 
 			OracleParameter or=new OracleParameter( "FLAG ", OracleType.Int32); 
 			or.Direction = ParameterDirection.Output; 
 			cmd.Parameters.Add( or ); 
 			try 
 			{ 
 				cmd.ExecuteNonQuery(); 
 				tx.Commit(); 
 			} 
 			catch (OracleException ex) 
 			{ 
 				s=ex.Message;  				 
 				throw ex; 
 			} 
 			if ( s!=null) 
 			{  				 
 			} 
 			return (int)or.Value;
------解决方案--------------------//这个是使用GotDotNet.ApplicationBlocks.Data.Oracle调用
oracle存储过程的 
 public DataSet GetRoadALL() 
 		{ 
 			DataSet ds=new DataSet(); 
 			adoHelper.GetSpParameterSet(Connstr, "PKG_PEPWEB_Road.GetRoadALL "); 
 			OracleParameter[] oraParameter=new OracleParameter[1]; 
 			oraParameter[0]=new OracleParameter( "Rst ",OracleType.Cursor); 
 			oraParameter[0].Direction=ParameterDirection.Output; 
 			ds=adoHelper.ExecuteDataset(Connstr, "PKG_PEPWEB_Road.GetRoadALL ",oraParameter); 
 			return ds; 
 		}