мой сценарий
я использую поставщика оракулов ODP.NET с С# 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 = new string[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 вставки, и я возвращаю идентификатор строки каждой записи массива.
Но я что-то пошло не так, например, если 2-я строка, все параметры OUT (массив) всегда установлены на 0. Я ожидал, что по крайней мере параметр params[0].value был расширен
Спасибо