- PR -

[ODP.NET]Date型フィールドにNullを設定する配列インサート方法は?

1
投稿者投稿内容
きんぞう
会議室デビュー日: 2003/08/14
投稿数: 3
投稿日時: 2003-08-14 10:51
ODP.Netの配列インサートを使っています。
Date型フィールドにNull値を設定したいのですが、下記の方法では0001/01/01 00:00が登録されてしまいます。

----------------------------------------------------------------
Dim m_oConnection = New Oracle.DataAccess.Client.OracleConnection()
m_oConnection.ConnectionString = "Data Source=AAAA;User id=BBBB;Password=CCCC"

Dim m_oInsertCmd = New Oracle.DataAccess.Client.OracleCommand()
m_oInsertCmd.CommandText = "INSERT INTO TABLE01(TIMENOW) VALUES (:TIMENOW)"
m_oInsertCmd.Connection = Me.m_oConnection
m_oInsertCmd.FetchSize = CType(65536, Long)
m_oInsertCmd.ArrayBindCount = 2
m_oInsertCmd.Parameters.Add(New OracleParameter("TIMENOW", OracleDbType.Date, 7, ParameterDirection.Input, True, 32, 32, "TIMENOW", DataRowVersion.Current, Nothing))

Dim d = New Date(1) {}
d(0) = Date.Pase("2003/08/14 10:00")
m_oInsertCmd.Parameters("TIMENOW").Value = d

m_oConnection.Open()
m_oInsertCmd.ExecuteNonQuery()
m_oConnection.Close()
きんぞう
会議室デビュー日: 2003/08/14
投稿数: 3
投稿日時: 2003-08-14 11:42
String型を使用することでNullを代入することができました!

----------------------------------------------
Dim s = New String(1) {}
s(0) = "2003/08/14/10:00"
s(1) = ""
m_oInsertCmd.Parameters("TIMENOW").Value = s
なな
ぬし
会議室デビュー日: 2003/06/22
投稿数: 659
お住まい・勤務地: 愛知県
投稿日時: 2003-08-14 13:08
既に解決済みのようですが...ご検討ください。

String型よりも、Oracle.DataAccess.Client.OracleDate型を使用したほうが良いと思います。
String型では、日付のフォーマット設定によっては、うまく動作しないかもしれませんので。

Nullを指定したい場合は、
m_oInsertCmd.Parameters("TIMENOW").Value = Null
になります。
きんぞう
会議室デビュー日: 2003/08/14
投稿数: 3
投稿日時: 2003-08-18 09:59
ありがとうございます。
OracleDate型で行うとインスタンスがありませんというエラーがでました。
Object型を使用することでNullを代入することができました!
----------------------------------------------
Dim obj = New OracleDate(1) {}
obj(0) = New OracleDate(CDate("2003/08/14 10:00"))
obj(1) = OracleDate.Null
m_oInsertCmd.Parameters("TIMENOW").Value = obj
→実行時にエラー。。。
----------------------------------------------
Dim obj = New Object(1) {}
obj(0) = CDate("2003/08/14 10:00")
m_oInsertCmd.Parameters("TIMENOW").Value = obj
→obj(1)をNothingのままにしておくとNullがインサート
1

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