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

Web services 如何将Oracle数组参数从ado.net c#传递到Oracle数据库,web-services,oracle11g,wcf-data-services,Web Services,Oracle11g,Wcf Data Services,在我使用oracle 11g和.net 2010的项目中。DAL是调用oracle db的web服务。 sp have array(oracle array)参数可插入多个值。 我有DAL中的字符串可观察集合。 如何将可观察到的集合值传递给oracle sp。 请帮助我。这是假设使用了Oracle ODP.NET,并且您已经建立了连接。还假定被调用的包/过程具有一个或多个table类型的输入参数(Oracle的数组实现) 您可以使用Oracle参数类完成,并将参数的集合类型设置为array u

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

请帮助我。

这是假设使用了Oracle ODP.NET,并且您已经建立了连接。还假定被调用的包/过程具有一个或多个table类型的输入参数(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();