Sözdizimi VEYA Visual Basic'te ifadeler

0

Soru

C++ veya C # bildiğim kadar Visual Basic bilmiyorum.

Bir select sorgusunun döndürülen 'testDataset` içinde herhangi bir sonucu olup olmadığını ve bazı sonuçları olup olmadığını kontrol edeceğim, bu yüzden aşağıdaki sözdizimini yazdım:

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 ++ ' da, mantıksal VEYA gerçek içindeki bir ifade gerçekleştiğinde, bir sonraki ifade işlenmez. Ancak Visual Basic'te durum böyle değil gibi görünüyor. Bu nedenle, visual basic'te birkaç ifadeyi nasıl denetleyebileceğimi ve biri gerçekleşirse sonraki ifadeleri işlemeyi nasıl durdurabileceğimi bilmek istiyorum.

Yani benim sorum esas olarak iki soru olarak sorulabilir:

  1. Bir sonraki koşulu kullanarak veya işlemeden birkaç koşulu nasıl kontrol edebilirim?

  2. Veri kümesinin sonuçları (en az bir satır) olup olmadığını ve bu (en az bir) satırda belirli bir sütunun olup olmadığını nasıl kontrol edebilirim?

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

En iyi cevabı

2

Tüm bu kontrolleri tek bir satırda kısa devre yapmak için null koşullu işlecini kullanabilirsiniz. Bu ? bundan sonra, bu zincirdeki üye sonraki üyeleri değerlendirmeyi durduracak ve üye null ise null değerini döndürecektir.

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

Bu, birkaç kontrol için ilginç bir fikirdir (+1). Soru, veri kümesinin neden null olabileceği veya Tabloların(0) null olabileceği vb.Sorusudur. Bunun basit olduğundan eminim. try-catch blok yeterli.
Maciej Los

@ MaciejLos Uygulamanızın çökmeyeceğinden (tümünü yakala) veya aşağıdaki gibi belirli bir Özel durum için özel durum işlemeyi idareli kullanmayı öğrendim UnauthorizedAccessException vb. ve mümkün olduğunda, programınızın mantığına dahil etmemek için. Bir istisna istisnai bir durumdur ve normal kabul edilmemelidir. Elbette, yaklaşımınız işe yarayacak... Ama op'nin mantığını zarif bir sözdizimi ile basitleştirilebilecek bir şey olarak gördüm. +1 için teşekkürler
djv

@ MaciejLos Değil mi? Burada ne oluyor mantığı boş çekleri tutmak, temiz, bir süre Try...Catch mantığı değiştirir ve karıştırır. Bu daha iyi bir uygulama ayrımı ve belki de OP için biraz fazla felsefi :)
djv

Ben çalışırken söylerim diye hiç yazma kodu olan bilinmeyen sonuç verir. Benim tarafımdan yazılan bir işlev null (nothing) döndürdüğünde bunu kasıtlı olarak yaparım... "Mantıksız mantık" ile aynı fikirde değilim ;)
Maciej Los
1

Bu kontrol etmek için overkill Nothing. Muhtemelen bir yarattınız DataSet ve içine bir DataTable. Tabloda döndürülen satırlar olmayabilir, ancak ikisi de olmayabilir. DataSet ne de DataTable bir Şey yok.

Yalnızca tek bir tablo kullanıyorsanız, veri kümesini dağıtın.

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

Öngörülemeyen birçok durum olabileceğinden (sütunlarının beklendiği gibi olmayabileceği bir tablo gibi)...), bu yüzden emin değilim, örneğin sütun x tabloda mevcut, bu yüzden tüm bu kontrollerin gerekli olduğu durum olabilir(sanırım!)
VSB

@VSB Bir noktaya değindiğine eminim. Bu kodda, şema sonuç kümesi tarafından belirlenir, bu nedenle eklenen veya eksik sütunlarla ilgili sorun olmaz. Dba'ların ara sıra kırılma değişiklikleri yapabileceğini anlıyorum.
Mary
1

Bu - muhtemelen-kesin bir cevap değil, genel bir tavsiyedir...

Veri kümesinden veri okurken hatayı yakalamanın en kısa yolu, Try içine bir kod almaktır...Yakalamak..Sonunda engellendi.

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

Diğer dillerde

Bu sayfa diğer dillerde

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