Vb.net проверить, что все строки содержат значение

Я новичок в VB.Net. Недавно я хочу проверить, содержит ли строка значение или нет, если содержит, вернуть true, если нет, содержать false.

Представьте, что это мой сотрудник по вызову за столом

DEPARTMENT  NAME
-------------------
   ABC      AAA
   CDE      BBB
   EFG      CCC

Насколько я знаю в PHP, мы могли бы использовать это для получения всего значения из строки.

    while( $row = mysqli_fetch_array($query) ){
        if($row['DEPARTMENT'] == "CDE"){
            echo "True";
        }
        else {
            echo "False";
        }
    }

А это мой код на VB.NET

 Dim da As Odbc.OdbcDataAdapter
 Dim ds As DataSet
 Dim dt As DataTable
 da = New Odbc.OdbcDataAdapter("SELECT * FROM employee", Connection)
    ds = New DataSet
    da.Fill(ds, "employee")
    dt = ds.Tables("employee")
    For Each row As DataRow In dt.Rows
        If (row("DEPARTMENT") = "ABC") Then
            MsgBox("True")
        Else
            MsgBox("False")
        End If
    Next

Основная проблема заключается в том, что если я попытался получить первую запись, утверждение, если оно работает. Но когда я попытался получить запись номер 2, например row("DEPARTMENT") = "CDE", результат всегда был ложным, это не должно исправлять, потому что строка содержит «CDE». Я весь день пытался решить и гуглил, но не могу найти выхода

Вам нужно начать с точного описания того, чего вы пытаетесь достичь. Вы хотите сказать, что хотите сообщить, содержит ли каждая отдельная строка определенное значение в определенном столбце? Если это верно, то какой смысл иметь Exit Sub в любой из ветвей вашего блока If? Если это не то, что вы хотите, пожалуйста, предоставьте ПОЛНОЕ и ЧЕТКОЕ объяснение того, что вы действительно хотите. Вы хотите сказать, что просто хотите проверить, есть ли в этом ценность? Если да, то почему вы тестируете конкретное значение в своем коде?

jmcilhinney 10.09.2018 08:54

Извините за мой плохой английский, на самом деле я просто хочу проверить, если row Department = abc, тогда они могут читать, обновлять, удалять и вставлять данные из формы, иначе другой отдел может только читать данные

Aria 10.09.2018 09:01

Это похоже на проблему XY. Вы уже знаете, как проверить, содержит ли строка определенное значение в определенном столбце, потому что вы уже это делаете. Включение или отключение редактирования для конкретной строки в зависимости от результата - это совсем другое дело, которое зависит именно от того, как вы показываете данные пользователю в пользовательском интерфейсе.

jmcilhinney 10.09.2018 09:45

если есть другие категории по отделу, скажите, что "XYZ", который может использовать базу данных CRUD, если я использую это, XYZ может только читать данные. Конечно, я могу использовать If (row("DEPARTMENT") = "ABC") And (row("DEPARTMENT") = "XYZ") Then, но я люблю проверять его один за другим с помощью функции if

Aria 10.09.2018 10:04

Итак, вы говорите, что хотите проверить, содержит ли поле какое-либо из нескольких конкретных значений, правильно?

jmcilhinney 10.09.2018 10:07

да, конечно, одно из нескольких конкретных значений, спасибо

Aria 10.09.2018 11:54
0
6
1 233
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я думаю, что вы пытаетесь сделать перекрестную ссылку на отдел с набором отделов, у которых есть привилегия CRUD базы данных?

В приведенном ниже примере это можно сделать, создав коллекцию привилегированных отделов и проверив эту коллекцию с помощью LINQs.Any().

P.S. Это можно улучшить, используя перечисление String.Equals() и StringComparison.

P.P.S Используйте операторы Using при использовании классов IDisposable.

Dim departments As List(Of String) = New List(Of String) From {
        "ABC",
        "CDE"
    }

 Dim da As Odbc.OdbcDataAdapter
 Dim ds As DataSet
 Dim dt As DataTable
 da = New Odbc.OdbcDataAdapter("SELECT * FROM employee", Connection)
    ds = New DataSet
    da.Fill(ds, "employee")
    dt = ds.Tables("employee")
    For Each row As DataRow In dt.Rows
        Dim department = row("DEPARTMENT").ToString()

        If departments.Any(Function(t) t.Equals(department, StringComparison.InvariantCultureIgnoreCase)) Then
            MsgBox("True")
        Else
            MsgBox("False")
        End If
    Next

Благодарим за ответ, но у меня возникла ошибка. Преобразование строки «ABC» в тип «Boolean» недопустимо ».

Aria 10.09.2018 12:03

@Aria, тогда вам нужно создать список логических значений.

Osama Rizwan 08.10.2020 09:59

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