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