无法转换类型为#System; Int32 []'的对象从Dapper ORM调用Oracle存储过程时键入' System.IConvertible

时间:2016-12-08 23:26:43

标签: .net oracle dapper

我正在尝试将整数数组传递给Oracle存储过程。

遵循Oracle中定义的类型。

CREATE OR REPLACE TYPE EMPIDLIST 
AS TABLE OF Number;

以下是使用上述类型的存储过程。

CREATE OR REPLACE PROCEDURE TESTINPUTARRAY 
(
  IN_STR_ARRAY IN EMPIDLIST
) AS 
BEGIN
  --Doing something here.....
  NULL;
END TESTINPUTARRAY;

以下是使用Dapper ORM从.net应用程序调用存储过程的代码。

List<int> values = new List<int>() { 1, 2, 3, 4, 5 };
OracleParameter parameters = new OracleParameter
{
    ParameterName = "IN_STR_ARRAY",
    OracleDbType = OracleDbType.Int32,                    
    Value = values.ToArray(),
    Direction = System.Data.ParameterDirection.Input
};
await connection.ExecuteAsync("TESTINPUTARRAY", param: parameters, commandType: CommandType.StoredProcedure);

当调用上述ExecuteAync方法时,我收到以下错误 -

  

无法转换类型为#System; Int32 []&#39;的对象输入&#39; System.IConvertible

我在网上搜索了这个问题,但找不到任何解决方案。

1 个答案:

答案 0 :(得分:1)

我之前回答过一个related question(你应该仔细检查一下,它应该是你的指南.net-ora dev),这就是你需要的:

OracleParameter parameters = new OracleParameter
{
    ParameterName = "IN_STR_ARRAY",
    OracleDbType = OracleDbType.Int32, 
    // -- ADD THESE LINES:
    CollectionType = OracleCollectionType.PLSQLAssociativeArray, 
    Size = 100, // Declare more than you expect                 
    // --
    Value = values.ToArray(),
    Direction = System.Data.ParameterDirection.Input
};