Sintaxe OU expressões no Visual Basic

0

Pergunta

Eu não sei o Visual Basic, tanto quanto eu sei C++ ou C#.

Eu estou indo para verificar se uma consulta select tiver quaisquer resultados retornados 'testDataset` e ter alguns resultados, então eu escrevi a sintaxe abaixo:

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

Em C++ quando uma expressão no interior de lógica OU vem verdadeira expressão seguinte não será processado. Mas parece que este não é o caso no Visual Basic. Então, eu quero saber como eu posso verificar várias expressões em visual basic e parar o processamento tarada se tornou realidade.

Então a minha pergunta é, principalmente, pode ser perguntado como duas perguntas:

  1. Como posso verificar vários condição de uso OU sem processamento tarada?

  2. Como posso verificar se o conjunto de dados tem resultados (pelo menos uma linha) e uma coluna específica está presente em que (pelo menos uma) linha?

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

Melhor resposta

2

Você pode usar o null operador condicional de curto-circuito, todos os cheques em uma linha. O ? depois que o membro da cadeia vai parar de avaliar os membros posteriores e retornar null se o membro é nulo.

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

Esta é uma idéia interessante para várias verificações (+1). A pergunta é: por conjunto de dados de um ser nulo ou Tabelas(0) pode ser nulo, etc. Eu tenho certeza de que simplesmente try-catch o bloco é o suficiente.
Maciej Los

@MaciejLos aprendi a usar a manipulação de exceção com moderação, para garantir que seu aplicativo não falha (catch-all), ou uma Exceção específica, tais como UnauthorizedAccessException etc., e, sempre que possível, não para incorporar a lógica do seu programa. Uma Exceção é excepcional, e não deve ser considerado como normal. É claro, a sua abordagem vai funcionar... Mas eu só vi OP lógica como algo que poderia ser simplificado com algumas elegante sintaxe. Obrigado por o +1
djv

@MaciejLos Certo? Para manter o nulo verifica na lógica, é claro que o que está acontecendo aqui, enquanto um Try...Catch substitui e obfuscates a lógica. Este é mais um melhores práticas de distinção, e talvez um pouco demasiado filosófico para o OP :)
djv

Eu estava tentando dizer que eu nunca escrever um código que retorna resultado desconhecido. Quando uma função escrita por mim retorna null (nada) eu fazê-lo intencionalmente... eu não posso concordar com a "ilógica lógica" ;)
Maciej Los
1

Isso é um exagero sobre a verificação para Nothing. Provavelmente, você criou um DataSet e encheu-o com uma DataTable. A tabela pode não ter quaisquer linhas retornadas, mas nem DataSet nem o DataTable não é Nada.

Se você estiver usando apenas uma única tabela, em seguida, dispensar com o conjunto de dados.

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

Como pode existir muitos imprevisível ocasiões (como uma tabela que suas colunas pode não ser como o esperado,...), então eu não tenho a certeza de que e.g. coluna x está presente na tabela para que ele possa ser a situação de que todas essas verificações são necessárias (eu acho!)
VSB

@VSB eu tenho certeza que você tem um ponto. Neste código, o esquema é determinado pelo conjunto de resultados, de modo nenhum problema com adição de falta ou colunas. Eu entendo o DBA pode fazer alterações de última hora ocasionalmente.
Mary
1

Este, provavelmente, não é uma resposta exata, mas os conselhos gerais...

O caminho mais curto para pegar erro durante a leitura de dados a partir do conjunto de dados é obter um código em Try...Catch..Finally bloco.

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

Em outros idiomas

Esta página está em outros idiomas

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