ストアド プロシージャから結果を返し、それらをさらに処理するために関数に渡します。場合によっては、フィールドの 1 つである日付値が null を返す可能性があります (まったく問題ありません)。
ただし、関数に null を渡すたびに、null を関数パラメーターの型に変換しようとして例外がスローされます。これを処理する最善の方法は何ですか?
データ:
Name StartDate EndDate
Bob 01/01/2013 NULL
呼び出し機能:
MyFunction(
DataRow.Item("StartDate"),
DataRow.Item("EndDate")) ' <--- invalid cast exception
関数:
Public Function MyFunction(
ByVal StartDate as Date,
ByVal EndDate as Date) As Object
....
Return something
End Function
編集:素晴らしいヒントがたくさんありますが、サイコロはありません。
関数で DateTime 型を nullable として宣言するとByVal EndDate as DateTime?
、結果は次のようになります。System.InvalidCastException: Specified cast is not valid.
DataRow.Field(Of DateTime)("EndDate") を使用して、パラメーターを null 許容型として宣言すると、次のようになります。System.InvalidCastException: Cannot cast DBNull.Value to type 'System.DateTime'
EDIT2:私の問題の 1 つの原因が見つかりました。私は Iif() を使用していましたが、値の 1 つは System.DBNull 型で、もう 1 つは Date 型でした。また、true 部分と false 部分の両方が同じ型でなければなりません。それを見つけるのにしばらく時間がかかりました。