我的 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<Employee> EmpList = new List<Employee>()
{
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 的方法,但想知道是否有使用最新托管客户端的方法。