如何将Oracle数组参数从ado.net c#传递到oracle数据库

时间:2011-06-12 07:24:55

标签: web-services oracle11g wcf-data-services

在我使用oracle 11g和.net 2010的项目中.DAL是调用oracle db的Web服务。 一个sp有数组(oracle数组)参数来插入多个值。 我在DAL中有字符串可观察的集合。 如何将可观察的集合值传递给oracle sp。
请帮助我。

1 个答案:

答案 0 :(得分:1)

这是假设使用Oracle ODP.NET并且您已经建立了连接。还假设被调用的包/过程具有一个或多个类型表的输入参数(Oracle的数组实现)。

您可以使用Oracle参数类完成,并将参数的集合类型设置为array。

 using System.Data;
 using Oracle.DataAccess.Client;
 using Oracle.DataAccess.Types;

 // create command object and set attributes
 OracleCommand cmd = con.CreateCommand();
 cmd.CommandText = "job_package.add_jobs";
 cmd.CommandType = CommandType.StoredProcedure;

 // create parameter objects for each parameter
 OracleParameter p_job_id = new OracleParameter();
 OracleParameter p_job_title = new OracleParameter();
 OracleParameter p_salary = new OracleParameter();

 // set parameter type for each parameter
 p_job_id.OracleDbType = OracleDbType.Varchar2;
 p_job_title.OracleDbType = OracleDbType.Varchar2;
 p_salary.OracleDbType = OracleDbType.Decimal;

 // set the collection type for each parameter
 p_job_id.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
 p_job_title.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
 p_salary.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

 // set the parameter values
 p_job_id.Value = new string[3] { "IT_DBA", "IT_DEV", "IT_MGR" };
 p_job_title.Value = new string[3] { "DBA", "IT Developer", "IT Manager" };
 p_salary.Value = new decimal[3] { 18000, 48000, 120000};

 // set the size for each array
 p_job_id.Size = 3;
 p_job_title.Size = 3;
 p_salary.Size = 3;

 // add parameters to command object collection
 cmd.Parameters.Add(p_job_id);
 cmd.Parameters.Add(p_job_title);
 cmd.Parameters.Add(p_salary);

  // execute the insert
  cmd.ExecuteNonQuery();

  // clean up 
  p_salary.Dispose();
  p_job_title.Dispose();
  p_job_id.Dispose();
  cmd.Dispose();
  con.Dispose();