使用ODP.Net托管客户端将对象数组传递给oracle存储过程
我在我的Web API中有以下Employee类。
public class Employee { public string Name { get; set; } public string City { get; set; } }
我的Web API会在每个请求中收到50个员工记录的列表,并且需要在Oracle数据库中更新这些详细信息。
我遵循将整数数组传递给Oracle存储过程的相同方法,并尝试了以下方法。
在Oracle中创建了以下类型和存储过程。
– 基础类型
create or replace type EMPTEST AS OBJECT ( Name varchar2(50), City varchar2(50) );
– 包
create or replace PACKAGE pkgUDFArray_Test AS type "T_EMPUDF_ARRAY" is table of EMPTEST; PROCEDURE ProcEmpUDFArray_Test( Param1 IN T_EMPUDF_ARRAY); END pkgUDFArray_Test;
– 包装体
create or replace PACKAGE BODY pkgUDFArray_Test AS PROCEDURE ProcEmpUDFArray_Test( Param1 IN T_EMPUDF_ARRAY) AS BEGIN FORALL indx IN 1..Param1.COUNT INSERT INTO Employee(Name,City) VALUES(Param1(indx).Name,Param1(indx).City); END ProcEmpUDFArray_Test; END pkgUDFArray_Test;
以下是来自Web API的代码。
List EmpList = new List() { new Employee() { City = "City1", Name="Emp1" }, new Employee() {City = "City2", Name="Emp2" } }; OracleConnection con = new OracleConnection(connectionString); con.Open(); var cmd = con.CreateCommand(); cmd.CommandText = "pkgUDFArray_Test.ProcEmpUDFArray_Test"; cmd.CommandType = CommandType.StoredProcedure; OracleParameter param1 = new OracleParameter(); param1.Direction = ParameterDirection.Input; param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray; param1.Value = EmpList.ToArray(); param1.Size = 2; param1.DbType = DbType.Object; try { cmd.ExecuteNonQuery(); con.Close(); con.Dispose(); } catch (Exception ex) { throw ex; }
当我尝试这个时,我得到错误“值不在预期范围内。” 在以下行。 param1.Value = EmpList.ToArray();
我知道我需要在这里做更多工作才能使它工作。
我搜索了类似的主题,我找不到有关托管客户端的任何主题。 我知道有一种方法可以使用旧的Oracle.DataAccess.dll,但想知道是否有使用最新托管客户端的方法。
上述就是C#学习教程:使用ODP.Net托管客户端将对象数组传递给oracle存储过程分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1031568.html