VB.Net DataRowに列が存在するかどうかを確認する方法
質問
XMLファイルをDataSetに読み込んでいますが、DataSetからデータを取得する必要があります。ユーザーが編集可能な構成ファイルであるため、フィールドは存在する場合と存在しない場合があります。不足しているフィールドをうまく処理するために、DataRowの各列が存在し、DBNullではないことを確認したいと思います。
すでにDBNullをチェックしていますが、例外をスローしたり、すべての列名をループする関数を使用したりせずに列が存在することを確認する方法がわかりません。これを行うための最良の方法は何ですか?
解決
DataRowは、基になるテーブルがリンクされている点で優れています。基になるテーブルを使用すると、特定の行に特定の列が含まれていることを確認できます。
If DataRow.Table.Columns.Contains("column") Then
MsgBox("YAY")
End If
他のヒント
DataSet.Tables(0).Columns.Contains(name)
を使用して、 DataTable
に特定の名前の列が含まれているかどうかを確認できます。
列が存在するかどうかを確認する別の方法は、列名を渡すときに Columns
コレクションインデクサーから返される値を Nothing
でチェックすることです:
If dataRow.Table.Columns("ColumnName") IsNot Nothing Then
MsgBox("YAY")
End If
このアプローチは、次のコードでさらに使用するために DataColumn
を取得する必要がある場合に、 Contains(" ColumnName")
メソッドを使用する方法よりも優先される場合があります。 。たとえば、どのタイプの列に値が格納されているかを知りたい場合があります。
Dim column = DataRow.Table.Columns("ColumnName")
If column IsNot Nothing Then
Dim type = column.DataType
End If
この場合、このアプローチは Contains(" ColumnName")
の呼び出しを節約すると同時にコードを少しきれいにします。
try ... catchステートメントを使用してコードブロックをカプセル化できます。コードを実行すると、列が存在しない場合は例外がスローされます。その後、スローする特定の例外を把握し、「列が見つかりません」を返すなど、必要に応じてその特定の例外を別の方法で処理することができます。