Эти строки ниже вызывают исключение, потому что параметр OracleCommand
ожидает тип данных int
, в то время как вы передаете значение массива int[]
(также привязка массива не используется по умолчанию).
command.Parameters.Add("@USERID", OracleDbType.Int32);
command.Parameters[0].Value = arrUID;
Если вы просто хотите передать один элемент, используйте индексный номер массива для присвоения значения.
command.Parameters[0].Value = arrUID[0];
Однако, если вы хотите передать все содержимое массива в параметр хранимой процедуры, попробуйте установить свойство OracleCollectionType.PLSQLAssociativeArray
в CollectionType
, прежде чем присваивать значение ( примечание: возможно требует, чтобы тип уровня схемы был объявлен первым до использование в хранимой процедуре, см. ссылку (1):
command.Parameters.Add("@USERID", OracleDbType.Int32);
command.Parameters[0].CollectionType = OracleCollectionType.PLSQLAssociativeArray;
command.Parameters[0].Value = arrUID;
// ExecuteNonQuery afterwards
Или просто установите свойство ArrayBindCount
перед назначением значения параметра:
command.BindByName = true;
command.ArrayBindCount = UID.Count; // assumed UID is a List<int>
command.Parameters.Add("@USERID", OracleDbType.Int32);
command.Parameters[0].Value = arrUID;
// ExecuteNonQuery afterwards
Дополнительные ссылки:
(1) C # 2010, ODP.net, вызов массива передачи хранимых процедур
(2) Хранимая процедура Oracle с использованием массива в качестве параметра для вставки таблицы
(3) Передать список целых чисел из C # в хранимую процедуру Oracle