Syntax ALEBO výrazy v jazyku Visual Basic

0

Otázka

Neviem, Visual Basic, rovnako ako som vedieť, C++ alebo C#.

Idem na kontrolu, ak výberový dotaz mať žiadne výsledky v vrátený 'testDataset" a mať nejaké výsledky, tak som napísal nižšie syntax:

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

V C++, keď výraz vnútri logické ALEBO sa splní ďalší výraz nebude spracovaná. Ale zdá sa, že toto nie je ten prípad v jazyku Visual Basic. Tak chcem vedieť, ako môžem skontrolovať niekoľko výrazov v jazyku visual basic a zastaviť spracovanie vedľa nich, ak jeden sa stal skutočnosťou.

Takže moja otázka je, hlavne, môže byť vyzvaný, ako dve otázky:

  1. Ako môžem skontrolovať niekoľko podmienkou je pomocou ALEBO bez spracovania ďalšej ty?

  2. Ako môžem skontrolovať, či Dataset má výsledky (aspoň jeden riadok) a stĺpci je prítomný v tom, že (aspoň jeden) riadok?

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

Najlepšiu odpoveď

2

Môžete použiť null podmienené prevádzkovateľ skrat všetky tieto kontroly v jednom riadku. Na ? po členské v tomto reťazci bude zastaviť hodnotenie nasledujúcich členov a vráti null, ak členský je null.

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

To je zaujímavý nápad, niekoľko kontrol (+1). Otázka je, prečo DataSet byť null alebo Tabuľky(0) môžu byť null, atď. Som si istá, že jednoducho try-catch blok je dosť.
Maciej Los

@MaciejLos som sa naučil používať výnimiek striedmo, buď aby sa zabezpečilo, že vaše aplikácie nebude crash (catch-all) alebo pre konkrétne Výnimky, ako napríklad UnauthorizedAccessException atď., a vždy, keď je to možné, nie začleniť ju do logiky programu. Výnimkou je výnimočné, a nemali by byť považované za normálne. Samozrejme, váš prístup bude fungovať... Ale práve som videl OP logika ako niečo, čo by mohlo byť zjednodušený s niektoré elegantné syntax. Vďaka za +1
djv

@MaciejLos Právo? Tak vedenie null kontroly v logike, to je jasné, čo sa deje tu, zatiaľ čo Try...Catch nahrádza a obfuscates logiku. To je viac, najlepšie rozdiel, a možno trochu príliš filozofickým na OP :)
djv

Snažil som sa povedať, že by som nikdy napísať kód, ktorý sa vracia neznámy výsledok. Keď funkcia napísal mi vráti hodnotu null (nič) robím to zámerne... nemôžem súhlasiť s "logické logické" ;)
Maciej Los
1

To je zbytočné na kontrolu Nothing. Pravdepodobne ste vytvorili DataSet a naplnil ju s DataTable. Tabuľka nemusí mať žiadne riadky vrátil, ale ani DataSet ani DataTable nie je Nič.

Ak používate len jednu tabuľku, potom upustiť 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-23 12:32:53

Pretože tam môže byť mnoho nepredvídateľných prípadoch (napríklad tabuľky, ktoré jej stĺpce nemusí byť tak, ako sa očakáva,...), takže nie som si istý, že napr. stĺpec x je prítomný v tabuľke tak by to mohlo byť situácia, že všetky tieto kontroly sú potrebné (myslím!)
VSB

@VSB som si istý, máte bod. V tejto kód schéma je určená výsledok nastaviť tak nie je problém s pridanou alebo chýbajúce stĺpce. Chápem DBA to môže urobiť lámanie zmeny príležitostne.
Mary
1

To pravdepodobne nie je presnú odpoveď, ale všeobecné rady...

Najkratšia cesta chytiť chyba pri čítaní dát zo súboru je získať kód do Skúste...Chytiť..Konečne bloku.

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

V iných jazykoch

Táto stránka je v iných jazykoch

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