- PR -

OracleのDate型フィールドにDbNull.ValueをInsertすると失敗する。

投稿者投稿内容
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2007-05-12 17:21
僕のリンク先に、

これ以外の.NET Frameworkデータ型からのDbTypeおよびOracleDbTypeの推論はサポートされていないため、DbTypeまたはOracleDbTypeを指定せずにOracleParameterの値としてそれ以外の.NET Frameworkデータ型を使用すると、例外が呼び出されます。

とあります。

で、.NET の DateTime 型は OracleDbType では TimeStamp 型に推論されるため、リンク先のような対応でOKだと思います。
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2007-05-12 20:30
ひろれいさん
返答ありがとうございます。
リンク先を拝見しました。
回避策はDbTypeを明示的に指定することで対応いたします。

OracleParameterのDbTypeを設定しない場合にDbNull.Valueが登録できるということはDbNull.Valueという「値」から何らかのDbTypeが推論されているということではないのでしょうか?
またこの時点で例外が呼び出されない点からも何らかのDbTypeが推論されていると思うのです。
DbNull.Valueで推論された「何らかのDbType」とDbNull.Valueの後に登録するDate型の値から推論されるべきDbTypeが異なる為、エラーが発生するのだと考えたのですが・・・

これ以外の.NET Frameworkデータ型からのDbTypeおよびOracleDbTypeの推論はサポートされていないため、DbTypeまたはOracleDbTypeを指定せずにOracleParameterの値としてそれ以外の.NET Frameworkデータ型を使用すると、例外が呼び出されます。
という事では違うような気がするのです。
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2007-05-14 13:25
OracleパラメータのValue値が.NetのDateTime型のとき
その値がDbNull.ValueであればOracleのTimeStamp型が推論され
DbNull.Value以外(Now等)であればOracleのDate型が推論されるということですね。

返答いただいた皆様
本当にありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)