質問

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ステートメントを使用してコードブロックをカプセル化できます。コードを実行すると、列が存在しない場合は例外がスローされます。その後、スローする特定の例外を把握し、「列が見つかりません」を返すなど、必要に応じてその特定の例外を別の方法で処理することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top