语法或表达方式在视觉基本的

0

的问题

我不知道视觉基本的,就像我知道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++时表达的内部逻辑或来真正的下一个表达将不会被处理。 但这似乎不是这种情况下,在视觉基础。 所以我想知道我怎么检查的几个表现在用visual basic和停止处理的下一个人如果一个是正确的。

所以我的问题是主要可要求作为两个问题:

  1. 我怎么可以检查若干条件的使用或没有处理接下来的?

  2. 我怎么可以检查,如果数据集已成果(至少一个排)和一个特定的柱是存在于(至少一)排?

dataset logical-or vb.net
2021-11-23 11:33:48
3

最好的答案

2

你可以使用 空有条件的操作者 短路所有这些检查中的一个线。 的 ? 在该成员在这个链条就会停止在评估后续的成员和返回null如果该成员为空。

Return testDataset?.Tables?.Item(0)?.Rows?.Any() ' true if any, false if none
2021-11-23 15:30:43

这是一个有趣的想法几项检查(+1). 问题是,为什么数据集的一个行为或表(0)可以null,等等。 我很肯定这只是 try-catch 区块是不够的。
Maciej Los

@MaciejLos我已经学会了使用例外处理的谨慎,以确保程序不会崩溃(全部)或对一个具体例外,例如 UnauthorizedAccessException 等等, 并只要有可能,不要将其纳入逻辑的程序。 一个例外是特殊的,并且不应该被认为是正常的。 当然,你的方法,将工作...但是我只看到了运算逻辑的东西这可能是简化一些优雅语法。 谢谢你的+1
djv

@MaciejLos吗? 因此保持的空中检查的逻辑,很明显的是什么会在这里,而一个 Try...Catch 替换和混淆的逻辑。 这是一个最佳做法的区别,也许有点太哲学的作:)
djv

我是想说,我从来没有写入一个代码返回未知的结果。 当一个功能的书面通过我返回null(没什么)我不是故意...我不能同意"不合逻辑的逻辑";)
Maciej Los
1

这是矫枉过正在检查 Nothing. 大概你已经创建了一个 DataSet 和它充满了一个 DataTable. 表可能不具有任何行返回,但是既没有 DataSet 也没有 DataTable 是什么。

如果仅使用一个单一的表格,然后分配的数据集。

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-23 12:32:53

由于可能有许多不可预测的场合(如表其列可能不会如所预期的,...),所以我不知道,例如列 x 是本表所以它可能是局势,所有这些检查是必要的(我猜!)
VSB

@VSB我相信你有一点。 在这样的代码,该方案是确定的结果设定这样没问题与加入或失踪列。 我的理解DBA可以作出重大更改。
Mary
1

这可能不是一个确切的答案,但是一般性的意见...

最短的路要赶上的错误,同时阅读的数据,从数据集得到代码转 尝试...抓..最后 块。

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-23 19:07:07

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................