我对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中检查几个表达式,并在其中一个表达式实现时停止处理下一个表达式。
所以我的问题主要可以分为两个问题:
如何在不处理下一个条件的情况下使用OR检查几个条件?
如何检查"数据集"是否有结果(至少一行(以及该(至少一(行中是否存在特定列?
您可以使用null条件运算符在一行中短路所有这些检查。此链中成员之后的?
将停止评估后续成员,如果该成员为null,则返回null。
Return testDataset?.Tables?.Item(0)?.Rows?.Any() ' true if any, false if none
这在检查Nothing
方面做得太过火了。假设您已经创建了一个DataSet
并用DataTable
填充它。该表可能没有返回任何行,但DataSet
和DataTable
都不是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