Я пишу какой-то механизм синхронизации между удаленной БД 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...
Любые идеи?