Benutzer mit den meisten Antworten
Linq und dbnull beim Datum

Frage
-
Hallo
Dim context As New dokumenteDataContext Dim mitglieder = From c In context.mitgliederliste _ Where c.id = btn.CommandArgument _ Select c For Each t In mitglieder tbAustritt.Text = t.austrittDatum ???
Einige Felder von dem AustrittsDatum haben in der Datenbank den Wert NULL.
Jetzt kommt bei der Ausgabe in ein Textfeld natürlich ein Fehler.
Wie kann ich den Fehler abfangen?
Ich habe auch schon selbst versucht, eine Lösung zu finden. Ich kann es in dem Falle im Zusammenhang mit LINQ aber nicht umsetzen.
Hat jemand einen Tipp für mich?Liebe Grüße, die Luzie!
Antworten
-
Hallo,
es hat sich jetzt erledigt.
Nach dem Lesen von gefühlten 1000 Einträgen mit gefühlten 1000 Lösungen war die Lösung doch einfach.
Dim objDate As Object If t.austritt IsNot Nothing Then objDate = DateTime.Parse(t.austritt) Else objDate = Nothing End If
Zum Weiterverarbeiten von NULL Werten im Datum ist dieser Eintrag zu empfehlen.
http://www.c-sharpcorner.com/UploadFile/sd_patel/EnterNullValuesForDateTime11222005015742AM/EnterNullValuesForDateTime.aspx
Liebe Grüße, die Luzie!
- Als Antwort markiert Luzie Montag, 9. April 2012 13:08
Alle Antworten
-
Möglichkeit 1. in der where clausel des Linq abfragen ob im austrittsdatum null ist. Where c.id = btn.commandArgument_ & c.austrittsdatum != null
Möglichkeit 2. in der schleife nur die berücksichtigen die ein gültiges datum haben. mitglieder.where(M => M.austrittsdatum != null).tolList()
Möglichkeit 3. eine if anweisung bevor du das datum in die textbox schreibst, die prüft ob ein gültiges datum vorhanden ist.
-
Möglichkeiten 1 und 2 scheiden aus, ich möchte den Datensatz ja selektieren.
Ich möchte lediglich eine Tipp, wie die Syntax lautet, die ich bei der Abfrage verwenden muss.
Folgendes habe ich probiert, aber der Fehler bleibt immer gleich ".. ungültige Konvertierung der Zeichenfolge in Type Date.. "
Dim objDate As Object If (t.austritt <> String.Empty) Then objDate = DateTime.Parse(t.austritt) Else objDate = DBNull.Value End If Public Function DisplayDate(ByVal displayDateTime As Nullable(Of DateTime)) As String Dim result As String = "" If displayDateTime.HasValue = True Then result = displayDateTime.Value Else result = "" End If Return result End Function Public Function getdbnull(ByVal dbfeld As String, ByVal wertfeld As String) As String ' --- dbfeld = Datenbankfeld ' --- wertfeld = Text, der ausgegeben wird Dim result As String = "" If String.IsNullOrEmpty(dbfeld) Or dbfeld = "" Or _ dbfeld Is DBNull.Value Then result = "" Else result = wertfeld.ToString End If Return result End Function
Liebe Grüße, die Luzie!
-
Hallo Luzie,
zum Umgang mit NULL Werten in .NET siehe bspw.:
http://msdn.microsoft.com/de-de/library/ms172138.aspx
Im Endeffekt musst Du deine Funktion(en) DisplayDate bzw. getdbnull( ... ) so erweitern, dass korrekt geprüft wird. Ein Beispiel findest Du in vorstehend genanntem Link.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hi Stefan,
sorry, damit komme ich nicht klar. Das sind Beispiele für ADO.NET, ich weiß nicht, wie ich die für meine Abfrage mit LINQ TO SQL abändern kann.
Ich habe meine Funktion noch erweitert
Public Function getdbnull(ByVal dbfeld As String) As String
' --- dbfeld = Datenbankfeld
' --- wertfeld = Text, der ausgegeben wird
Dim result As String = ""
If String.IsNullOrEmpty(dbfeld) Or dbfeld = "" Or DisplayDate(dbfeld) = False Or _
dbfeld Is DBNull.Value Then
result = Nothing
Else
result = CDate(dbfeld)
End If
Return result
End Function
Public Function DisplayDate(ByVal displayDateTime As Nullable(Of DateTime)) As Boolean
Dim result As Boolean = False
If displayDateTime.HasValue = True Then
result = True
End If
Return result
End FunctionFehler: Das Objekt mit Nullwert muss einen Wert haben
Liebe Grüße, die Luzie!
- Bearbeitet Luzie Montag, 9. April 2012 09:48 Änderung nach mehreren Versuchen
-
1 u. 2 scheiden aus weil du selektieren möchtest? eher weil du nicht selektieren möchtest, denn das tut 1 u. 2 ja.
also du möchtest auch wenn das datum null ist eine anzeige , nur halt ohne wert und optimal fall ohne fehler?
dann könntest du sowas versuchen...
Dim context As New dokumenteDataContext Dim mitglieder = From c In context.mitgliederliste _ Where c.id = btn.CommandArgument _ select new
{
Wert = C.Wert,
.
.
.
austrittDatum = C.austrittDatum != null ? C.austrittDatum.ToString() : ""
}; For Each t In mitgliedermüsstest dann halt alle werte komma getrennt auflisten. Wenn du das austrittsDatum nicht als String haben willst, könntest du als false Wert auch ein new DateTime() machen. aber wie ich das verstanden habe geht es dir um die ausgabe. da würde sich auch sowas wie eine Meldung oder Warnung das kein gültiger Wert vorhanden ist anbieten.
- Bearbeitet Lennart F Montag, 9. April 2012 08:31
-
Hallo
das Austrittsdatum darf nur eingetragen werden, wenn es bekannt ist. In 80 % der Fälle ist es nicht bekannt. In dem Falle muss ein Wert NULL oder nothing eingetragen werden.
Mir fehlen halt die Kenntnisse, dies richtig umzusetzen. Meine bisherigen Versuche sind gescheitert. Vielleicht denke ich auch falsch, keine Ahnung.
Ich muss schlicht und einfach nur einen Wert in einem Textfeld darstellen, der dbnull sein kann und das bekomme ich nicht hin mit linq.
Ist es nicht irgendwie möglich, dieses Datumsfeld direkt im linq to sql Statment in einen string zu konvertieren?
Liebe Grüße, die Luzie!
-
Hallo,
es hat sich jetzt erledigt.
Nach dem Lesen von gefühlten 1000 Einträgen mit gefühlten 1000 Lösungen war die Lösung doch einfach.
Dim objDate As Object If t.austritt IsNot Nothing Then objDate = DateTime.Parse(t.austritt) Else objDate = Nothing End If
Zum Weiterverarbeiten von NULL Werten im Datum ist dieser Eintrag zu empfehlen.
http://www.c-sharpcorner.com/UploadFile/sd_patel/EnterNullValuesForDateTime11222005015742AM/EnterNullValuesForDateTime.aspx
Liebe Grüße, die Luzie!
- Als Antwort markiert Luzie Montag, 9. April 2012 13:08