Dapper ORM에서 Oracle 저장 프로 시저를 호출 할 때 'System.Int32 []'유형의 개체를 'System.IConvertible'형식으로 캐스팅 할 수 없습니다.

.net dapper oracle

문제

오라클 저장 프로 시저에 정수 배열을 전달하려고합니다.

Oracle에서 정의 된 다음 유형.

CREATE OR REPLACE TYPE EMPIDLIST 
AS TABLE OF Number;

다음은 위의 유형을 사용하는 저장된 proc입니다.

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

다음은 Dapper ORM을 사용하여 .net 응용 프로그램에서 저장된 proc을 호출하는 코드입니다.

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 []'형식의 개체를 'System.IConvertible'형식으로 캐스팅 할 수 없습니다.

이 문제에 대해 온라인에서 검색했지만 해결책을 찾지 못했습니다.

수락 된 답변

내가 전에 관련된 질문 하나에 대답 했다. (주의 깊게 조사해야하며, 그것은 .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
};


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow