Как узнать, существует ли столбец в VB.Net DataRow

Я читаю XML-файл в DataSet, и мне нужно получить данные из DataSet. Поскольку это файл конфигурации, доступный для редактирования пользователем, поля могут быть там, а могут и не быть. Чтобы правильно обрабатывать отсутствующие поля, я хотел бы убедиться, что каждый столбец в DataRow существует, а не DBNull.

Я уже проверяю DBNull, но я не знаю, как убедиться, что столбец существует, не создавая исключения или не используя функцию, которая перебирает все имена столбцов. Как лучше всего это сделать?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
56
0
104 584
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Всегда лучше проверять наличие ошибок, не прибегая к блоку try ... catch; его следует использовать только в крайнем случае.

user82646 22.02.2010 12:05

Хотя это плохой дизайн, Андерс прав, он сработает. Возможно, он не заслуживает голосования "за", но определенно не заслуживает "против".

Jeff 04.04.2018 23:52

Вы можете использовать DataSet.Tables(0).Columns.Contains(name), чтобы проверить, содержит ли DataTable столбец с определенным именем.

Ответ принят как подходящий

DataRow хороши тем, что с ними связана их базовая таблица. С помощью базовой таблицы вы можете убедиться, что в конкретной строке есть определенный столбец.

    If DataRow.Table.Columns.Contains("column") Then
        MsgBox("YAY")
    End If

Другой способ узнать, существует ли столбец, - это проверить для 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") и в то же время делает ваш код немного чище.

Другие вопросы по теме