La syntaxe pour les expressions OU dans Visual Basic

0

La question

Je ne sais pas Visual Basic autant que je sais, C++ ou C#.

Je vais vérifier si une requête select avez des résultats retournés dans les 'testDataset et d'avoir des résultats, j'ai donc écrit la syntaxe suivante:

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

En C++, lorsqu'une expression à l'intérieur de logique OU vient la véritable expression suivante ne sera pas traitée. Mais il semble que ce n'est pas le cas dans Visual Basic. Donc, je veux savoir comment puis-je vérifier plusieurs expressions dans visual basic et arrêter le traitement à côté si on est venu vrai.

Donc ma question est principalement peut être posé que deux questions:

  1. Comment puis-je vérifier plusieurs conditions de l'aide OU sans traitement d'à côté?

  2. Comment puis-je vérifier si le jeu de données de résultats (au moins une ligne et une colonne spécifique est présent dans (au moins une) ligne?

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

La meilleure réponse

2

Vous pouvez utiliser la valeur null opérateur conditionnel de court-circuit tous ces chèques en une seule ligne. L' ? après que le membre, cette chaîne arrêter l'évaluation des membres et de retourner la valeur null si le membre est nul.

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

C'est une idée intéressante à plusieurs contrôles (+1). La question est de savoir pourquoi un DataSet être null ou des Tables(0) peut être null, etc. Je suis assez sûr que, tout simplement try-catch le bloc est suffisant.
Maciej Los

@MaciejLos j'ai appris à utiliser la gestion des exceptions avec parcimonie, soit pour s'assurer que votre application ne plante pas (fourre-tout) ou d'une Exception spécifique comme UnauthorizedAccessException etc., et chaque fois que possible, de ne pas l'intégrer dans la logique de votre programme. Une Exception est exceptionnel, et ne devrait pas être considérée comme normale. Bien sûr, votre approche du travail... Mais je viens de voir OP logique comme quelque chose qui pourrait être simplifié avec une certaine élégance de la syntaxe. Merci pour le +1
djv

@MaciejLos Droit? Donc le fait de garder le nul vérifie dans la logique, c'est clairement ce qui se passe ici, alors qu'un Try...Catch et remplace le code de la logique. C'est plus une meilleure pratique de la distinction, et peut-être un peu trop philosophique pour l'OP :)
djv

J'étais en train de dire que je n'avais jamais écrire un code qui retourne le résultat inconnu. Lorsqu'une fonction écrite par me renvoie null (nothing) je le fais intentionnellement... je ne peux pas d'accord avec "illogique logique" ;)
Maciej Los
1

C'est exagéré sur la vérification de Nothing. Je suppose que vous avez créé un DataSet et rempli avec de l' DataTable. Le tableau peuvent ne pas avoir toutes les lignes retournées, mais ni l' DataSet ni l' DataTable n'est Rien.

Si vous n'utilisez qu'une seule table, puis de les distribuer à l'ensemble de données.

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

Car il pourrait y avoir de nombreuses occasions imprévisibles (par exemple un tableau qui ses colonnes peut ne pas être comme prévu,...), donc je ne suis pas sûr que, par exemple, la colonne x est présent dans la table de sorte qu'il pourrait être la situation que toutes ces vérifications sont nécessaires (je suppose!)
VSB

@VSB je suis sûr que vous avez un point. Dans ce code, le schéma est déterminé par le jeu de résultats, donc pas de problème avec ajout de la ou des colonnes manquantes. Je comprends DBA peut faire des modifications importantes de temps en temps.
Mary
1

Ce - sans doute - n'est pas une réponse exacte, mais des conseils généraux...

Le chemin le plus court pour attraper erreur lors de la lecture des données à partir d'un dataset pour obtenir un code Try...Catch..finally 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

Dans d'autres langues

Cette page est dans d'autres langues

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