0

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

我要检查一个选择查询是否在返回的“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++ 中,当逻辑 OR 中的表达式为真时,将不处理下一个表达式。但在 Visual Basic 中似乎并非如此。所以我想知道如何检查 Visual Basic 中的几个表达式,如果一个表达式为真,则停止处理下一个表达式。

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

  1. 如何在不处理下一个条件的情况下使用 OR 检查多个条件?

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

4

3 回答 3

2

您可以使用null 条件运算符将所有这些检查短路到一行中。此链中的?成员之后将停止评估后续成员,如果成员为 null,则返回 null。

Return testDataset?.Tables?.Item(0)?.Rows?.Any() ' true if any, false if none
于 2021-11-23T15:30:43.947 回答
1

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

从数据集中读取数据时捕获错误的最短方法是将代码放入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
于 2021-11-23T12:05:30.943 回答
1

这在检查Nothing. 大概您已经创建了 aDataSet并用DataTable. 该表可能没有返回任何行,但 theDataSet和 theDataTable都不是 Nothing。

如果您只使用单个表,则无需使用 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
于 2021-11-23T12:32:53.843 回答