Вопрос

Я читаю 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 столбец с конкретным именем.

Другой способ выяснить, существует ли столбец, - проверить значение Nothing , возвращаемое индексатором коллекции Columns при передаче имени столбца:

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

Этот подход может быть предпочтительнее, чем тот, который использует метод Contains (" ColumnName ") , когда в следующем коде впоследствии потребуется получить этот DataColumn для дальнейшего использования. , Например, вы можете узнать, какой тип имеет значение, хранящееся в столбце:

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

В этом случае этот подход позволяет сэкономить на вызове Contains (" ColumnName ") , делая ваш код немного чище.

Вы можете инкапсулировать свой блок кода с помощью оператора try ... catch, и когда вы запустите свой код, если столбец не существует, он выдаст исключение. Затем вы можете выяснить, какое конкретное исключение оно выдает, и по своему желанию обработать это конкретное исключение, например, возвращая " Column Not Found ".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top