Visual Basic 中 OR 表达式的语法

Syntax for OR expressions in Visual Basic

我对 Visual Basic 的了解不如我对 C++ 或 C# 的了解。

我要检查 select 查询是否在返回的“testDataset”中有任何结果并有一些结果,所以我写了以下语法:

If ((testDataset Is Nothing) Or (testDataset.Tables Is Nothing) Or testDataset.Tables.Count = 0 _
    Or (testDataset.Tables.Item(0).Rows Is Nothing) Or (testDataset.Tables.Item(0).Rows.Count = 0) _
    Or (testDataset.Tables.Item(0).Rows(0) Is Nothing)) Then
    MessageBox.Show("Dataset has no results!", "Database Query Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Return False
End If

在C++中,当逻辑或中的表达式为真时,下一个表达式将不会被处理。但在 Visual Basic 中似乎并非如此。所以我想知道如何检查 visual basic 中的多个表达式,并在一个表达式为真时停止处理下一个表达式。

所以我的问题主要可以分为两个问题来问:

  1. 如何使用 OR 检查多个条件而不处理下一个条件?

  2. 如何检查数据集是否有结果(至少一行)以及该行(至少一行)中是否存在特定列?

这可能不是一个确切的答案,而是一般性的建议...

从数据集中读取数据时捕获错误的最短方法是将代码放入 Try...Catch..Finally 块。

Dim bRetVal As Boolean = True
Try
   'your code to read data
Catch ex As Exception
    MessageBox.Show("Something went wrong..." & vbCrLf  & vbCrLf & ex.Message, "Error while reading data", MessageBoxButtons.OK, MessageBoxIcon.Error)
    bRetVal = False
Finally
  Return bRetVal

这在检查 Nothing 时有点矫枉过正。大概您已经创建了一个 DataSet 并用 DataTable 填充了它。 table 可能没有返回任何行,但 DataSetDataTable 都没有。

如果您只使用单个 table,则省去 DataSet。

Private dt As New DataTable

Private Sub GetData()
    Using cn As New SqlConnection(ConLocal),
            cmd As New SqlCommand("Select Top 10 * From Coffees", cn)
        cn.Open()
        Using reader = cmd.ExecuteReader
            dt.Load(reader)
        End Using
    End Using
End Sub

Private Function CheckTable() As Boolean
    If dt.Rows.Count > 0 Then
        Return True
    End If
    MessageBox.Show("Dataset has no results!", "Database Query Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Return False
End Function

您可以使用 null conditional operator 将所有这些检查短路在一行中。此链中成员之后的 ? 将停止评估后续成员,如果成员为 null,则 return null。

Return testDataset?.Tables?.Item(0)?.Rows?.Any() ' true if any, false if none