私は VB.NET プログラミングが初めてなので、例を示していただければ幸いです。
Oracle 11g データベースへの OleDB 接続があります。テーブルから 1 つの行を読み取り、行オブジェクト (mClockInOutInfo) を設定しようとしています。私が直面している問題は、返された行に null の DateTime (タイムスタンプ) 列があることです。
もちろん、mClockInOutInfo.RowDate = dr.GetDateTime(0) から始めました (RowDate 列がクエリの最初の列であると仮定します)。
null をチェックする必要があることがすぐにわかったので、 = If(IsDBNull(dr.GetDateTime(0)), DBNull.value, dr.getDateTime(0)) をコードに追加しました。(私は今、このあたりで見つかった NullSafeString 関数をどこかで使用しています。しかし、DateTime 型には何もありませんでした。作成しようとしましたが、成功しませんでした。したがって、まだ日時列の If(IsDbNull(...)) コードを使用しています。 .
私が抱えている問題は、「指定されたキャストが無効です」というエラーが表示されることです。その声明を評価するとき。.GetDataTypeName(0) メソッドで列の型を確認しました。DBTYPE_DBTIMESTAMP を返します。スキーマ情報を調べて、その列が実際に探している情報であることを確認しました。私が知る限り、if() ステートメントの IsDBNull(drRecent.GetDateTime(0)) 部分の評価中にエラーが生成されています。ステートメントを複数行の if ステートメントに分割することでこれを確認しました: if IsDBNull(dr.GetDateTime(0)) Then ... Else ... End If
if IsDBNull(...) 行によってスローされたのと同じキャスト エラーが発生します。
そこで、SQL 文字列に戻り、空のデータを含む列で Coalesce を実行しました。同じキャストエラーを受け取りました。最後に、イライラして、TO_DATE 関数を使用するように SQL クエリを変更し、適切な形式パラメーターを使用して日付文字列を入力しました。私はまだこの同じキャストエラーを受け取ります。
mClockInOutInfo のプロパティは DateTime として定義されています。まったく同じ方法で定義された他の列があり、テーブルにデータがある列はエラーを出していません。
データベースで DateTime (Timestamp) 列に null が許可されている場合、私が何をすべきかについてのアイデアはありますか? すべてのアイデアを歓迎します。前もって感謝します。