ここで説明されているのと同様のことをしようとしていますが、null許容型を使用しています。
http://www.csharp-station.com/Tutorials/Lesson23.aspx
int availableUnits = unitsInStock ?? 0;
VBでは、次のようになります。
Dim availableUnits As Int32 = If(unitsInStock, 0)
ただし、DbNullである可能性のあるdb列と、Nothing(DbNullとは異なる)である可能性のあるnull許容型を使用しています。列がDbNullの場合、Nothingを返します。それ以外の場合は、値を返します。例:
Dim availableUnits As Int32? = If(myDataReader("UnitsInStock").Value, Nothing)
「指定されたキャストは無効です」というエラーが表示されますが、理由はわかりません。私もこれを試しました:
Dim availableUnits As Int32? = If(isDbNull(myDataReader("UnitsInStock").Value), myDataReader("UnitsInStock").Value, Nothing)
これは厄介で、同じエラーが発生します。動作する唯一のものはこれです:
Dim availableUnits As Int32?
If isDbNull(myDataReader("UnitsInStock").Value) Then
availableUnits = myDataReader("UnitsInStock").Value
Else
availableUnits = Nothing
End If
これはばかげています。null許容db値を私が知らないnull許容変数に入れるより良い方法はありますか?