2016-12-08 6 views
1

Я пытаюсь передать целочисленный массив в хранимую процедуру Oracle.Невозможно наложить объект типа 'System.Int32 []', чтобы напечатать 'System.ICconvertible при вызове хранимой процедуры Oracle из Dapper ORM

следующий тип, определенный в 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; 

Ниже приведен код для вызова хранимой прок из .net приложения, используя Dapper ОРМ.

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 называется, я получаю следующее error-

Невозможно привести объект типа 'System.Int32 []' к типу «System.IConvertible

Я искал в Интернете об этой проблеме, но не смог найти решение.

ответ

1

Я ответил один related question раньше (вы должны изучить его внимательно, это должно быть вашим ориентиром в .net-ора разработчика), и это то, что вам нужно:

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 
}; 
+0

Благодаря T.S. Теперь он работает с этим решением. – Raj

+0

@Raj Я рад, что вы решили свою проблему! –

 Смежные вопросы

  • Нет связанных вопросов^_^