60

XML ファイルを DataSet に読み込んでおり、DataSet からデータを取得する必要があります。これはユーザーが編集可能な構成ファイルであるため、フィールドが存在する場合と存在しない場合があります。不足しているフィールドを適切に処理するには、DataRow の各列が存在し、DBNull でないことを確認したいと思います。

すでに DBNull をチェックしていますが、例外をスローしたり、すべての列名をループする関数を使用したりせずに、列が存在することを確認する方法がわかりません。これを行うための最良の方法は何ですか?

4

4 に答える 4

174

DataRowは、基になるテーブルがリンクされているという点で優れています。基になるテーブルを使用すると、特定の行に特定の列が含まれていることを確認できます。

    If DataRow.Table.Columns.Contains("column") Then
        MsgBox("YAY")
    End If
于 2008-10-07T14:39:44.290 に答える
19

に特定の名前の列が含まれているDataSet.Tables(0).Columns.Contains(name)かどうかを確認するために使用できます。DataTable

于 2008-10-07T14:37:47.023 に答える
2

Another way to find out if a column exists is to check for Nothing the value returned from the Columns collection indexer when passing the column name to it:

If dataRow.Table.Columns("ColumnName") IsNot Nothing Then
    MsgBox("YAY")
End If

This approach might be preferred over the one that uses the Contains("ColumnName") method when the following code will subsequently need to get that DataColumn for further usage. For example, you may want to know which type has a value stored in the column:

Dim column = DataRow.Table.Columns("ColumnName")
If column IsNot Nothing Then
    Dim type = column.DataType
End If

In this case this approach saves you a call to the Contains("ColumnName") at the same time making your code a bit cleaner.

于 2015-12-03T22:31:53.397 に答える
-3

コードのブロックを try ... catch ステートメントでカプセル化できます。コードを実行すると、列が存在しない場合は例外がスローされます。次に、スローされる特定の例外を把握し、必要に応じて、「Column Not Found」を返すなど、その特定の例外を別の方法で処理することができます。

于 2008-10-07T14:32:26.817 に答える