Visual Basic中OR表达式的语法



我对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中似乎并非如此。所以我想知道如何在visualbasic中检查几个表达式,并在其中一个表达式实现时停止处理下一个表达式。

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

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

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

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

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

这在检查Nothing方面做得太过火了。假设您已经创建了一个DataSet并用DataTable填充它。该表可能没有返回任何行,但DataSetDataTable都不是Nothing。

如果您只使用一个表,那么就不用数据集了。

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

这可能不是一个确切的答案,但一般建议。。。

从数据集中读取数据时捕获错误的最短方法是将代码放入Try。。。接住最后阻止。

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

相关内容

  • 没有找到相关文章

最新更新