DataRow項目がNullかをチェックを行う際、Nothingと比較してもうまく判定できません。IsNullメソッドを使用するか、DBNull.Value と比較します。
Nullをチェックする方法
DataRowの IsNullメソッド を使用するか、DBNull.Value と比較します。If row.IsNull("カラム名") Then
MessageBox.Show("NULLです。")
End If
If row("カラム名") Is DBNull.Value Then
MessageBox.Show("NULLです。")
End If
サンプルコード
次のサンプルを実行すると "Nothingです。" のメッセージは表示されません。DataRowに Nothing をセットしても DBNull.Value に変換されるためです。' データテーブルに列を追加
Dim dataTable As DataTable = New DataTable()
dataTable.Columns.Add("col_String", GetType(System.String))
' -------------------------------------------------------
' Nothingを設定
' -------------------------------------------------------
Dim row As DataRow = dataTable.NewRow()
' ※これは悪い例です。正しくはDBNull.Valueをセットします。
row("col_String") = Nothing
' 正しいコード
'row("col_String") = DBNull.Value
' -------------------------------------------------------
' NULLの判定
' -------------------------------------------------------
If row.IsNull("col_String") Then
' 表示される
MessageBox.Show("IsNULLです。")
End If
If row("col_String") Is DBNull.Value Then
' 表示される
MessageBox.Show("DBNull.Valueです。")
End If
If row("col_String") Is Nothing Then
' 表示されない
MessageBox.Show("Nothingです。")
End If
サンプルコードのダウンロード
サンプルコードの実行には Microsoft Visual Studio 2008 以上のバージョンが必要です。 2008以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。検証環境
- Microsoft Visual Studio 2008 Version 9.0.30729.4462 QFE Edition: Professional
- Microsoft .NET Framework Version 3.5 SP1
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))