Sintaxa pentru SAU expresii în Visual Basic

0

Problema

Nu stiu Visual Basic fel de mult ca stiu C++ sau C#.

Am de gând pentru a verifica dacă o interogare de selectare rezultate în revenit 'testDataset și au unele rezultate, așa că am scris sintaxa de mai jos:

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

În C++, atunci când o expresie în interiorul logică SAU vine adevărat următoarea expresie nu vor fi procesate. Dar se pare că acest lucru nu este cazul în Visual Basic. Deci vreau sa stiu cum pot verifica mai multe expresii în visual basic și opri procesarea cele următoare dacă s-a adeverit.

Deci, întrebarea mea este, în principal, poate fi cerut ca două întrebări:

  1. Cum pot verifica mai multe condiție este utilizarea SAU fără prelucrarea cele următoare?

  2. Cum pot verifica dacă setul de Date are rezultate (cel puțin un rând) și o anumită coloană este prezent în care (cel puțin unul) rând?

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

Cel mai bun răspuns

2

Puteți folosi null operatorul condiționată de scurt-circuit toate aceste verificări într-o singură linie. La ? după state în acest lanț se va opri de evaluare ulterioare, membrii și întoarce null dacă membrul este nul.

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

Aceasta este o idee interesantă pentru mai multe controale (+1). Întrebarea este de ce set de Date o fi null sau Tabele(0) poate fi null, etc. Sunt destul de sigur că pur și simplu try-catch blocul este suficient.
Maciej Los

@MaciejLos am învățat să folosesc excepție de manipulare cu moderație, fie pentru a se asigura că aplicația nu se va prăbuși (catch-all) sau pentru o anumită Excepție, cum ar fi UnauthorizedAccessException etc., și ori de câte ori este posibil, să nu-l includă în logica programului. O Excepție este excepțională, și nu ar trebui să fie considerate normale. Desigur, abordarea ta va lucra... Dar tocmai am văzut-OP e logic ca ceva care ar putea fi simplificată, cu un elegant sintaxă. Multumesc pentru +1
djv

@MaciejLos Nu? Deci, păstrarea null verificări în baza de logica, e clar ce se întâmplă aici, în timp ce un Try...Catch înlocuiește și bulversează logica. Acest lucru este mai mult de o mai bună practică de distincție, și poate un pic prea filozofic pentru OP :)
djv

Am încercat să spun că nu voi mai scrie un cod care returnează rezultat necunoscut. Atunci când o funcție scrisă de mine returnează null (nimic) am făcut-o intenționat... nu pot fi de acord cu "ilogic logica" ;)
Maciej Los
1

Aceasta este nejustificată verificarea pentru Nothing. Probabil ați creat-o DataSet și a umplut-o cu un DataTable. Tabelul nu poate avea orice rânduri s-a întors, dar nici DataSet nici DataTable nu este Nimic.

Dacă sunteți folosind doar un singur tabel, apoi dispensa cu setul de Date.

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

Deoarece nu ar putea fi mai multe imprevizibil ocazii (cum ar fi un tabel în care coloanele sale ar putea să nu fie așa cum era de așteptat,...), așa că nu sunt sigur că, de exemplu, coloana x este prezentă în tabelul deci, ar putea fi situația în care toate aceste verificări sunt necesare (cred!)
VSB

@VSB sunt sigur că ai dreptate. În acest cod, schema este determinat de rezultatul stabilit astfel încât nici o problema cu adaos sau lipsă coloane. Am înțeles DBA poate face rupere modificări ocazional.
Mary
1

Asta - probabil - nu este un raspuns exact, dar sfaturi generale...

Cel mai scurt drum pentru a prinde eroare la citirea datelor din setul de date este de a obține un cod în a Încerca...Prinde..în cele din Urmă bloc.

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

În alte limbi

Această pagină este în alte limbi

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