Как узнать, существует ли столбец в VB.Net DataRow
Я читаю XML файл в DataSet и должен получить данные из DataSet. Поскольку это настраиваемый пользователем конфигурационный файл, поля могут быть или не быть. Хорошо обрабатывать недостающие поля, я хотел бы убедиться, что каждый столбец в DataRow существует и не является DBNull.
Я уже проверяю DBNull, но я не знаю, как убедиться, что столбец существует, не вызывая исключения или используя функцию, которая пересекает все имена столбцов. Каков наилучший способ сделать это?
Ответы
Ответ 1
DataRow хорош в том, что у них есть связанная с ними базовая таблица. В базовой таблице вы можете убедиться, что определенная строка имеет в ней определенный столбец.
If DataRow.Table.Columns.Contains("column") Then
MsgBox("YAY")
End If
Ответ 2
Вы можете использовать DataSet.Tables(0).Columns.Contains(name)
, чтобы проверить, содержит ли DataTable
столбец с определенным именем.
Ответ 3
Еще один способ узнать, существует ли столбец, - проверить 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")
, в то же время делая ваш код немного более чистым.
Ответ 4
Вы можете инкапсулировать свой блок кода с помощью инструкции try... catch, и когда вы запустите свой код, если столбец не существует, он будет генерировать исключение. Затем вы можете выяснить, какое конкретное исключение оно выбрасывает, и заставить обработать это конкретное исключение по-другому, если вы этого захотите, например, вернуть "Столбец не найден".