【问题标题】:Oracle UDT (SdoGeometry) insert DBNull.Value failsOracle UDT (SdoGeometry) 插入 DBNull.Value 失败
【发布时间】:2015-11-24 04:48:45
【问题描述】:

我正在使用 ODP.NET 在远程 Oracle DB 和本地 Oracle XE DB 之间编写某种同步机制。我正在同步的表有一个空间列(因此是一个用户定义的类型,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...

时它会失败

有什么想法吗?

【问题讨论】:

    标签: c# oracle odp.net user-defined-types dbnull


    【解决方案1】:

    有趣的东西...我看错了方向。

    问题不在于插入,而是在执行插入时出现。问题与参数方向有关。似乎代码无法处理参数的输出方向。当我改变它时,一切又开始工作了。

    所以问题现在解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      相关资源
      最近更新 更多