0

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の場合は失敗します...

何か案は?

4

1 に答える 1

0

おかしなこと...私は間違った方向を見ています。

問題は挿入ではありませんが、挿入が実行されると発生します。この問題は、パラメーターの方向と関係があります。コードがパラメータの出力方向を処理できないようです。変更すると、すべてが再び機能し始めました。

ということで、とりあえず問題解決。

于 2012-08-15T13:33:50.107 に答える