Ошибка Oracle UDT (SdoGeometry) вставки DBNull.Value

Я пишу какой-то механизм синхронизации между удаленной БД Oracle и локальной БД Oracle XE с использованием ODP.NET. Таблица, которую я синхронизирую, имеет пространственный столбец (и, следовательно, определяемый пользователем тип, sdo_geometry). Моя логика в C# делает выбор в удаленной базе данных, перебирает результат OracleDataReader и вставляет результаты в локальную базу данных.

Это работает как шарм, но когда значение пространственного столбца равно DBNull.Value, вставка завершается с ошибкой с этим сообщением:

Object reference not set to an instance of an object.

   at Oracle.DataAccess.Client.OracleParameter.PostBind_OracleObject(OracleConnection conn)
   at Oracle.DataAccess.Client.OracleParameter.PostBind(OracleConnection conn, OpoSqlValCtx* pOpoSqlValCtx, Int32 arraySize)
   at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
   at Gwr.Bsb.Oli.Framework.Helpers.SynchronizationHelper.TryModifyData(OracleCommand cmd) 

Код выглядит примерно так:

var parameter = new OracleParameter(parameterName, OracleDbType.Object);
parameter.OracleDbType = OracleDbType.Object;
parameter.UdtTypeName = "MDSYS.SDO_GEOMETRY";
parameter.Direction = ParameterDirection.InputOutput;
parameter.Value = reader[i];

Как я уже говорил. Код отлично работает, когда есть пространственное значение. Но это не удается, когда значение reader[i] равно DBNull.Value...

Любые идеи?


person TurBas    schedule 15.08.2012    source источник


Ответы (1)


Забавные вещи... Я смотрю не в ту сторону.

Проблема не во вставке, а возникает при выполнении вставки. Проблема как-то связана с направлением параметра. Кажется, что код не может обрабатывать направление вывода параметра. Когда я его поменял, все снова заработало.

Так что проблема пока решена.

person TurBas    schedule 15.08.2012