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 中的多个表达式,并在一个表达式为真时停止处理下一个表达式。
所以我的问题主要可以分为两个问题来问:
如何使用 OR 检查多个条件而不处理下一个条件?
如何检查数据集是否有结果(至少一行)以及该行(至少一行)中是否存在特定列?
这可能不是一个确切的答案,而是一般性的建议...
从数据集中读取数据时捕获错误的最短方法是将代码放入 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 可能没有返回任何行,但 DataSet
和 DataTable
都没有。
如果您只使用单个 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
我对 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 中的多个表达式,并在一个表达式为真时停止处理下一个表达式。
所以我的问题主要可以分为两个问题来问:
如何使用 OR 检查多个条件而不处理下一个条件?
如何检查数据集是否有结果(至少一行)以及该行(至少一行)中是否存在特定列?
这可能不是一个确切的答案,而是一般性的建议...
从数据集中读取数据时捕获错误的最短方法是将代码放入 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 可能没有返回任何行,但 DataSet
和 DataTable
都没有。
如果您只使用单个 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