PDA

Vollständige Version anzeigen : der wert eines Null SQL datensatzes


FrankMueller
10.01.2008, 07:40
Hallo!Ich lese aus einer Tabelle mehrere Datensätze aus und lasse sie in einer Schleife durchlaufen. Wenn der Datensatz NULL ist,dann sollte er mir nichts in die Variable sKommentar schreiben, doch mit meinen Befehlen kommt immer die Fehlermeldung Der Wert eines NULL SQL DAtensatzes kann nicht zurückgegeben werden!
If (objReader.GetString(i + 13) <> DBNull.Value.ToString) Then
sKommentar = objReader.GetString(i + 13).ToString
End If oder
If (objReader.GetString(i + 13) is not NULL) Then
sKommentar = objReader.GetString(i + 13).ToString
End If

hcscherzer
10.01.2008, 10:34
Moin Frank,
die Prüfung auf Null muss vor dem .Getstring() erfolgen denn die Get-Funktionen können mit leeren Datenfeldern nix anfangen:If Not objReader.IsDBNull(i + 13) Then
sKommentar = objReader.GetString(i + 13).ToString

FrankMueller
10.01.2008, 13:16
Prima klappt super! da hab ich gleich noch ne Frage, ich habe in meinem Kommentar einen Text stehen,der ab und an mit einer Zahl zwischen 100 und 999 beginnt!Wenn dies der Fall ist,soll er mir diese Zahl in einer anderen Variablen speichern,hier mein Ansatz,gibt es in vb.net ne Überprüfung auf between???

If sKommentar.Substring(0, 3) zwischen 100 und 999 Then
Den Wert in eine Variable packen

End If

direkt
10.01.2008, 14:22
Hallo

Naja du könntest das auch ganz billig lösen mit 2 IF schleifen...

If xxxx > 99 then
if xxxx < 1000 then

''neue variable erstellen

end if
end if

mfg

cyril

Noodles
10.01.2008, 15:14
If i > 99 AndAlso i < 1000 Then
DoSomething()
End If

FrankMueller
11.01.2008, 06:31
Jetzt habe ich noch eine letzte Frage, nämlich wie ich einem bereits schon vorher zugewiesenem Integerwert wieder NULL zuweise!

Also in einer Schleife ist i= 100 beim nächsten Schleifendurchlauf möchte ich nicht der VAriablen 0 zuweisen, sondern nichts oder NULL,damit ich das in eine Datenbank eintragen kann!
ich habe das jetzt mal so probiert,aber dann kann ich damit keinen insert absetzen,da dann da steht,der & Operator ist für die Typen String und System (of Nullable) nicht definiert:

iStoerort_ID1=Nothing
if IsNumeric(sKommentar.Substring(0, 3)) = True Then
iStoerort_ID1 = 100
End If


sSQL = ("INSERT INTO dbo.Stoerungen (Stoerort_ID,Kommentar) Values " iStoerort_ID1 & _
",'" & sKommentar & "')")

Also das im Integer Feld ncihts mehr steht,in der Datenbank dann beim ersten Datensatz 100 beim zweiten wieder NULL in Stoerort_ID

hcscherzer
11.01.2008, 08:00
Einer Integer-Variablen kannst Du keinen Wert NULL zuweisen.
Diese hat immer einen realen Wert, nach der Deklaration 0 und ansonsten immer den zuletzt zugewiesenen Wert.
Auch String-Variablen haben immer einen Wert: mindestens "" (leere Zeichenkette).
Lediglich Objektvariablen und Strukturen können den 'Wert' Nothing bekommen.

Vielleicht hilft es Dir, wenn Du einen Wert, der sonst nicht vorkommt (z.B. -1) benutzt, um diesen Zustand zu definieren. Und dann per sSQL = "INSERT INTO dbo.Stoerungen (Stoerort_ID,Kommentar) Values ("
if iStoerort_ID1 = - 1 then
ssql &= dbnull.value
else
sSQL &= iStoerort_ID1
end if
ssql &= ", '" & sKommentar & "')"


Im Code war allerdings ein Fehler: es fehlte ein '&' nach dem " hinter Values

Noodles
11.01.2008, 08:18
Einer Integer-Variablen kannst Du keinen Wert NULL zuweisen.

Das kann man seit .NET 2.0 nicht mehr so allgemein sagen. Denn mit Nullable Types kann man einem Wertetyp null zuweisen.

hcscherzer
11.01.2008, 09:54
seit .NET 2.0 Aber es gibt ja auch noch VS2003 und .NET 1.1 :bawling: