【问题标题】:vb.net check all row contain valuevb.net 检查所有行是否包含值
【发布时间】:2019-02-14 13:24:59
【问题描述】:

我是 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”。我试图解决并搜索它一整天,但我找不到出路

【问题讨论】:

  • 您需要从准确描述您想要实现的目标开始。您是说要报告每个单独的行是否包含特定列中的特定值?如果这是正确的,那么在 If 块的任一分支中都有一个 Exit Sub 有什么意义?如果那不是您想要的,那么请提供您想要的完整和清晰的解释。你是说你只是想检查是否有任何价值?如果是这样,您为什么要测试代码中的特定值?
  • 对不起,我的英语不好,其实我只是想检查行部门是否= abc,然后他们可以从表单中读取、更新、删除和插入数据,否则其他部门只能读取数据
  • 这听起来像是 XY 问题。您已经知道如何检查某行是否包含特定列中的特定值,因为您已经在这样做了。根据结果​​为特定行启用或不启用编辑完全是另一回事,这完全取决于您在 UI 中向用户显示数据的方式。
  • 如果部门有更多的分类,说“XYZ”谁可以CRUD数据库,如果我用那个,XYZ只能读取数据。我当然可以使用If (row("DEPARTMENT") = "ABC") And (row("DEPARTMENT") = "XYZ") Then,但我喜欢用 if 函数一一检查
  • 那么你的意思是你想测试该字段是否包含几个特定值中的任何一个,对吗?

标签: vb.net datatable dataset odbc


【解决方案1】:

我认为您正在尝试做的是将部门与有权对数据库进行 CRUD 的部门集合进行交叉引用?

下面可以通过创建特权部门的集合并使用 LINQs.Any() 检查该集合来实现此目的。

附:这可以通过使用String.Equals()StringComparison 枚举来改进。

P.P.S 在使用 IDisposable 类时使用 Using 语句。

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”到类型“布尔”的转换无效。'
  • @Aria 那么你需要创建布尔值列表。
猜你喜欢
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多