После обновления от собственного поставщика данных Oracle .NET до Oracles ODP.NET я столкнулся со следующей проблемой.
У меня есть хранимая процедура, которая является частью пакета, и она принимает 32 параметра, все IN, кроме одного, обозначенного как параметр OUT.Во всяком случае, вот проблема, которая у меня возникла.У меня есть параметр даты, переданный как varchar2, а затем еще 3 параметра, которые также являются varchar2.В остальном все они типа NUMBER.
В моем .NET-коде все значения, передаваемые хранимой процедуре, являются либо строковыми, либо int, с 4 исключениями.У меня есть 4 элемента данных типа UInt32.Значение, которое они содержат, слишком велико для типа int, поэтому использовался uint.
В этом проблема.Когда мы использовали собственный поставщик данных Oracle .NET, в конструктор параметров был включен тип данных OracleType.Number, теперь у конструктора параметров Oracle есть OracleDbType.Int32 и OracleDbType.Int64.Тип данных uint не имел проблемы, когда был задан в качестве значения параметра типа данных OracleType.Number, но теперь с новым клиентом я получаю разные ошибки в зависимости от типов данных, которые я использую.
(ПоКстати, хранимая процедура работает нормально при вызове со значениями, которые я передаю. Все эти исключения встречаются в операторе ExecuteNonQuery экземпляра объекта Oracle Command.)
Я изменил тип данных, содержащий мои значения кака также тип данных параметра, используя следующие комбинации.Вот результаты каждого.
.NET Datatype ' uint ' Тип данных ODP .NET Параметр 'OracleDbType.Int32' * System.OverflowException: значение было либослишком большой или слишком маленький для Int32.в System.Convert.ToInt32 (значение UInt32) в System.UInt32.System.IConvertible.ToInt32 (поставщик IFormatProvider) в System.Convert.ToInt32 (значение объекта) в Oracle.DataAccess.Client.OracleParameter.PreBind_Int32 () в Oracle.DataAccess.Client.OracleParameter.PreBind (OracleConnection conn, IntPtr errCtx, Int32 arraySize) в Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery () в ScoutLoaderService.EventLoader.Load () *
* 101at.
.uint 'Тип данных параметра ODP .NET
' OracleDbType.Int64 ' Oracle.DataAccess.Client.OracleException ORA-06502: PL / SQL: ошибка числа или значения: ошибка преобразования символа в числоORA-06512: в строке 1 в Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx pOpoSqlValCtx, процедура получения объекта, объектная ссылка на объект).HandleError (Int32 errCode, OracleConnection conn, строковая процедура, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, Object src, Boolean bCheck) в Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery () в ScoutLoaderService.EventLoader.Load () * * * * 28 * * * 1026.'Тип данных параметра ODP .NET
' OracleDbType.Int64 ' Oracle.DataAccess.Client.OracleException ORA-06502: PL / SQL: ошибка числа или значения: ошибка преобразования символа в число ORA-06512:в строке 1 в Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx pOpoSqlValCtx, объектный источник, процедура String, логическая переменная класса.errCode, OracleConnection conn, процедура String, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, объект src, логический bCheck) в Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery ()