在.NET中调用Oracle9i存储过程经验总结(1) [ 2006-6-1 22:05:00 | By: heroe ] 在.NET中调用Oracle9i存储过程可以用多个数据提供者,比如OralceClient,OleDb。本文将用OralceClient为例。.NET语言用C#。 一、调用一个带输入、输出参数的存储过程 首先,在Oralce中创建存储过程如下: create or replace procedure GetRecords(name_out out varchar2,age_in in varchar2) as begin select NAME into name_out from test where AGE = age_in; end; 然后,在C#项目中作如下调用: string connectionString = "Data Source=YXZHANG;User ID=YXZHANG;Password=YXZHANG"; string queryString = "getrecords"; OracleConnection cn = new OracleConnection(connectionString); OracleCommand cmd = new OracleCommand(queryString,cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("name_out",OracleType.VarChar,20); cmd.Parameters["name_out"].Direction = ParameterDirection.Output; cmd.Parameters.Add("age_in",21); try { cn.Open(); cmd.ExecuteNonQuery(); Console.WriteLine("Name is:{0}",cmd.Parameters["name_out"].Value.ToString()); cn.Close(); } catch( OracleException ex ) { Console.WriteLine("Exception occurred!"); Console.WriteLine("The exception message is:{0}",ex.Message.ToString()); } finally { Console.WriteLine("------------------End-------------------"); } 小结: 以上是很平常的调用方法,但是我在做这个示例程序的时候,却不是那么一帆风顺。这里要指出OracleClient 的一个不尽如人意之处,就是对于参数名称,必须和存储过程定义中的参数同名,否则就会报错。比如将代码中的“name_out”改为别的名称的话,就会报异常。但我试着用OleDb 代替OralceClient,却没有这个问题。不知道在新版本的数据提供程序中会否改进这一点? 二、调用不返回数据的存储过程 首先,在 Oralce中创建存储过程如下: create or replace procedure insertRecord(UserID in varchar2, UserName in varchar2, UserAge in varchar2) is begin insert into test values (UserID, UserName, UserAge); end; 然后,在 C#项目中作如下调用: string connectionString = "Data So...