Toon posts:

[VB.NET] scalar query aanpassen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heren,

Ik heb last van groeipijnen met de nieuwe visual studio...
Mijn programma maakt gebruik van een Access database die gegevens bijhoudt die de gebruiker moet ingeven en beheren. Deze data is persoons- en adresinformatie.
Dankzij de vele geautomatiseerde stappen in VS2005 is het werken met queries eenvoudig(er). Echter nu heb ik een scalar query waarmee ik op zoek ga naar het adres ID van een adres met als zoekparameters alle niet-key-velden.
Dit alles wordt gemaakt in de dataset, die de code hierna genereert.

De code van mijn zoekAdres query (in dbDataSet.Designer.vb) ziet er zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        Public Overloads Overridable Function ZoekAdres(ByVal straatnaam As Integer, ByVal huisnummer As Integer, ByVal bijnummer As String, ByVal postcode As String) As System.Nullable(Of Integer)
            Dim command As System.Data.OleDb.OleDbCommand = Me.CommandCollection(2)
            command.Parameters(0).Value = CType(straatnaam,Integer)
            command.Parameters(1).Value = CType(huisnummer,Integer)
            If (bijnummer Is Nothing) Then
                Throw New System.ArgumentNullException("bijnummer")
            Else
                command.Parameters(2).Value = CType(bijnummer,String)
            End If
            If (postcode Is Nothing) Then
                Throw New System.ArgumentNullException("postcode")
            Else
                command.Parameters(3).Value = CType(postcode,String)
            End If
            Dim previousConnectionState As System.Data.ConnectionState = command.Connection.State
            command.Connection.Open
            Dim returnValue As Object
            Try 
                returnValue = command.ExecuteScalar
            Finally
                If (previousConnectionState = System.Data.ConnectionState.Closed) Then
                    command.Connection.Close
                End If
            End Try
            If ((returnValue Is Nothing)  _
                        OrElse (returnValue.GetType Is GetType(System.DBNull))) Then
                Return System.Nullable.FromObject(Of Integer)(Nothing)
            Else
                Return New System.Nullable(Of Integer)(CType(returnValue,Integer))
            End If
        End Function


In het begin zie je 2 checks of bijnummer en postcode 'nothing' zijn. Bij de properties van de tabel in de datasetdesigner staat de NullValue = (Nothing).
Als ik met deze parameter speel en de dataset hergenereer dan blijven deze checks staan! Dit wil ik niet.
Indien mijn scalar query ook niets oplevert dan wordt er ook een error getriggered.

Mijn vraag is nu hoe ik dit probleem kan oplossen/omzeilen op een nette manier?

De query:
Afbeeldingslocatie: http://users.pandora.be/leiekant/GCS0518.jpg

De dataset:
Afbeeldingslocatie: http://users.pandora.be/leiekant/GCS0517.jpg

[ Voor 2% gewijzigd door Verwijderd op 08-12-2005 18:38 . Reden: url's fixed ]


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
je kan zeggen:
code:
1
WHERE (straatnaam = ? OR straatnaam IS NULL) AND ... rest van parameters


want NULL-values moet je verglijken met 'IS' en niet met '=' (handig he.. NOT)

op deze manier maak je dus stukjes querie die ook 'true' geven als de waarde NULL is.

is dat wat je bedoelt ?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
joopst schreef op vrijdag 09 december 2005 @ 08:43:
je kan zeggen:
code:
1
WHERE (straatnaam = ? OR straatnaam IS NULL) AND ... rest van parameters


want NULL-values moet je verglijken met 'IS' en niet met '=' (handig he.. NOT)
Ja dat is handig, NULL is immers niet gelijk aan NULL. NULL vertegenwoordigd een onbekende waaarde, die kun je die niet vergelijken met een andere onbekende waarde. Dus NULL = NULL kan niet, daarvoor is de speciale operator IS.

Oops! Google Chrome could not find www.rijks%20museum.nl