3

ストアド プロシージャから結果を返し、それらをさらに処理するために関数に渡します。場合によっては、フィールドの 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 部分の両方が同じ型でなければなりません。それを見つけるのにしばらく時間がかかりました。

4

4 に答える 4

6

null 許容のDateTime パラメータを使用します。

 ByVal EndDate AS Nullable(Of DateTime)

完全な例:

Public Function MyFunction(ByVal StartDate as Date, ByVal EndDate as Nullable(Of DateTime)) As Object
    ....
    Return something
End Function
于 2013-09-05T14:54:37.090 に答える
1

パラメータを作成してみてくださいNullable

Public Function MyFunction(ByVal StartDate as DateTime, ByVal EndDate as DateTime?) As Object
    ....
    Return something
End Function

Fieldただし、メソッドを使用して呼び出す必要がある場合があります。

MyFunction(DataRow.Field(Of DateTime)("StartDate"), DataRow.Field(Of DateTime?)("EndDate")) 
于 2013-09-05T14:55:01.907 に答える
0

null になる可能性のある値に null 許容値を使用することを検討する必要があります。例については、こちらをご覧ください.... DateTime「null」値

于 2013-09-05T14:54:19.063 に答える
0

データベース側からは、日時を null チェックして、「1990 年 1 月 1 日」のような任意の日付を割り当てることができます。

于 2013-09-05T14:56:16.180 に答える