Toon posts:

[mysql & asp.net] NULL value probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste developers,

Heb een vraagje.

Na byna de gehele dag al gezocht te hebben waarom ik met deze error kreeg

code:
1
Cast From Type DBNull to Type String Not Valid


Dit kwam door de NULL waardes in myn database.
Ik begreep er in het begin geen fluit van maar begrijp het dus nu dat het daar aan ligt (null mogelijk of niet mogelijk).
Ik heb die functie van null of not null values altijd begrijpen als mandotory of niet mandotory.

In iedergeval asp.net gaat op zijn bekkie (erg logisch) by NULL values.

Nu zijn er 2 oplossingen:
- ik kan alleen velden neergaan zetten in de database dat ze niet NULL mogen zijn.(dan voor mysql automatisch ' ' in)
- of ik kan met aps.net gebruik maken van dbNULL afvanging. (http://www.dotnetforums.net/t69351.html)

Welke manier is het beste?
Is het beter om de database by legen velden NULL waardes in te vullen en dan gebruik te maken dbNULL?
Of kan ik gewoon zonder consequentisch de velden op NOT NULL neerzette?

thankse _/-\0_

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
haha nee dat is van myn collega
maar dat is het niet daar is al een fix voor gevonden. (http://support.microsoft....spx?scid=kb;EN-US;Q319243)
Dat was namelijk een fout in de odbc aansturing en is gefixt.

Maar dit is heeeel iets anders.
Hij kan hier namelijk een NULL (waarde uit de db) niet omzetten naar een integer of string. Logische.

Maar de vraag is wat handigste is om te doen.
Of waardes allemaal keihard not NULL neerzette in de database
of alle NULL waardes die uit de db komen afvangen met een functie dbNULL (zie http://www.dotnetforums.net/t69351.html)


wat is de beste oplossing?

Verwijderd

hehehe yep is idd mijn post. De NO DATA error is idd opgelost :)
Alleen hebben we nu een probleem met de NULL waardes die de query oplevert (in de vorige post kwam het niet eens zover).

Als je een veld 'Null' maakt in de database worden ze gevuld met harde NULL values, een 'Not Null' veld wordt echter gevuld met ''. (zie voorbeeldje)

code:
1
2
VALUES (NULL, 0, NULL, 'fout', '', NULL, '', '', '', '', 
NULL, NULL, '', '', 0, NULL, '', NULL)


Met het uitlezen van de waardes uit een query waarbij er NULL waardes terug zijn gekregen geeft ASP.NET een dat hij de NULL value niet kan casten naar een String. (*duh*)

Nu hebben we 2 mogelijheden hiervoor:
1 - alle velden 'Not Null' maken in de databes. (hierdoor worden alle velden automagisch gevuld met een '' ipv NULL)
2 - een functie aanroepen die controleert op System.DBNULL.value's en deze omzet naar "" alvorens hem naar String te casten.

Optie 1 is de gemakkelijkste, alleen wat is het nadeel hiervan (database technisch)

[ Voor 20% gewijzigd door Verwijderd op 28-03-2003 15:38 ]


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Tja...je moet je gewoon afvragen of je uberhaupt wel iets met NULLwaardes wil doen. Een NULL waarde is dus een logische waarde die betekent dat er geen waarde is (niet waar maar ook niet onwaar). Dit kan nuttig zijn als je bijvoorbeeld onderscheid wil maken tussen een veld wat met een blanco waarde is ingevuld ( '' ) of helemaal niet is ingevuld.
Als dat binnen je database design niet nodig is, om dat onderscheid te maken, dan zou ik lekker voor optie 1 gaan

Verwijderd

Ik ben het met marty eens, als er een lege record ingevoegd moet worden, vul dan gegevens als '' en 0 in.

  • shades
  • Registratie: September 2001
  • Laatst online: 10-08 15:01

shades

huh ?

Het op 0 (nul) of leeg maken ("") van een database veld is niet altijd handig hoor. Denk maar aan geld of tijddatum velden.

Zo kan je het afvangen.
If Not IsNull(waarde) Then CStr(waarde)

Anders kan je namelijk niet converteren.

Wat wel kan
If IsNull(waarde) Then waarde = 1 of ""
Maar das dus niet handing want "" of 0 <> Null !!

Want je ook kan doen om al dit gezeik te voorkomen is zegen dat de waarde die in de db komt te staan niet NULL mag worden maar das al gezegd..

https://k1600gt.nl


  • Kix@$$
  • Registratie: December 2001
  • Laatst online: 21-08 15:33
Ik heb voor dit soort dingen een functie gemaakt:
Visual Basic .NET:
1
2
3
4
5
6
7
Function DQNull(varValue as Variant) as String
    If IsDbNull(varValue) Then
        return ""
    Else
        return varValue
    End If
End Function


Dit kun je, als je dat wilt, eventueel nog uitbereiden met het soort variabele (int of wat dan ook) :).

[ Voor 3% gewijzigd door Kix@$$ op 28-03-2003 22:37 ]


Verwijderd

de datareader heeft een functie om te controleren of een veld null is....

datareader.ISDBNull() geeft een boolean, hiermee kan je je probleem verhelpen.

Verwijderd

Topicstarter
Thanks mensen echt werelds
dit kunnen we goed gebruiken.

NOT NULL aan geven in de database (dus optie 1), daar zat ik zelf ook al sterk aan te denken, zoals SHADES ook zegt het is "verstandiger"(handiger) tenopzichte van.... ja ten opzichte van alles eigenlijk.

Die IsDbNull functie is een hele handige functie absoluut, maar zie het niet echt voor me om alle variables die NULL waarde af te vangen. Dit is nog al wat bij sommige hahaha LOL. Maar even goed super bedankt.

Thanks mensen
Pagina: 1