|
■No55730 (やじゅ さん) に返信
> .NET4.0を使えるなら、DataRowから値を取っている場合、Field<T>を使って変換してみるとか
> 例 Name = product.Field<string>("Name")
こんなものが実装されていたんですね。私は昔Accessを使っていた経緯からNz関数を実装して
使っていました。Extensionが使えるようになってからは以下の実装にしてます。(VB.NETでごめんなさい)
DataReaderでも似た実装をしています。
Imports System.Runtime.CompilerServices
Imports System.Data
Public Module 〜
<Extension>Public Function Nz(of T)(Row as DataRow, ColNm as String, NullValue as T) as T
if Row.IsNull(ColNm) then
return NullValue
else
return DirectCast(Row(ColNm), T)
end if
End Function
'--- DateはNullのときNothingとすることが多いので別で定義
<Extension>Public Function NzDate(Row as DataRow, ColNm as String) as Date
if Row.IsNull(ColNm) then
return Nothing
else
return DirectCast(Row(ColNm), Date)
end if
End Function
End Module
使用するとき:
Dim row as Datarow
row = 〜
Dim a as String = row.Nz("文字列項目","") '--- 型推論でNz(of String)に勝手になる
Dim b as Integer = row.Nz("Int項目", 0) '--- 型推論でNz(of Integer)に勝手になる
Dim c as Decimal = row.Nz("Dec項目", 0D) '--- 型推論でNz(of Decimal)に勝手になる
Dim d as Date = row.NzDate("Date項目")
|