мой сценарий
Я использую ODP.NET oracle провайдера с c # 3.5, и я пытаюсь передать массив в качестве параметра для процедуры ... как это:
var paramNames = new OracleParameter();
paramNames.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
paramNames.ParameterName = "P_JOB_TITLE";
paramNames.Size = 2;
paramNames.Value = new string[2]{ "name1", "name1" };
cmd.Parameters.Add(paramNames);
когда код времени выполнения переходит к paramNames.Value = новая строка [2] {"name1", "name1"}; это ловит с этой ошибкой
«Значение не попадает в ожидаемый диапазон»
Кто-нибудь может это исправить?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
При указании OracleDbType ошибка исправлена, но при выполнении выдавались ошибки
paramNames.OracleDbType = OracleDbType.Varchar2;
"Невозможно привести объект типа 'System.String []' к типу" System.IConvertible "."
Моя цель - сделать что-то вроде этого
http://aspalliance.com/621_Using_ODPNET_to_Insert_Multiple_Rows_within_a_Single_Round_Trip.3
ДРУГАЯ ПРОБЛЕМА С ВНЕШНИМ ПАРАМЕТРОМ
Вставка такого параметра out
paramNames = new OracleParameter();
paramNames.ParameterName = "O_JOB_ID";
paramNames.Size = 3;
paramNames.Direction = ParameterDirection.Output;
paramNames.OracleDbType = OracleDbType.Int32;
paramNames.Value = new int[3] { 0, 0, 0 }; ;
cmd.Parameters.Add(paramNames);
заполнено правильно, когда ExecuteNonQuery завершен. Например, процедура pls-sql выполняет 3 вставки, и я возвращаю id строки каждой записи массива.
Но если что-то пошло не так, например, при разборе 2-й строки все параметры OUT (массив) всегда устанавливаются на 0. Я ожидал, что хотя бы параметры [0] .value были улучшены
Спасибо