Einfügen von null-Werten in Datums-Feldern?
Habe ich ein FormView-wo ziehe ich Daten aus einer Tabelle (MS Access), und klicken Sie dann einfügen (und mehr Daten) in eine andere Tabelle. Habe ich Probleme mit den Terminen.
Die erste Tabelle hat zwei Felder Datum: date_submitted
und date_updated
. In einigen Aufzeichnungen, date_updated
leer ist. Dies führt mich zu einem data mismatch " Fehler beim einfügen in die zweite Tabelle.
Könnte es sein, weil ich bin databinding die date_updated
Feld aus der ersten Tabelle in ein HiddenField auf der FormView. Es nimmt dann den Wert aus dem HiddenField und versucht, stecken Sie es in die zweite Tabelle:
Dim hfDateRequestUpdated As HiddenField = FormView1.FindControl("hfDateRequestUpdated")
myDateRequestUpdated = hfDateRequestUpdated.Value
'... It then attempts to insert myDateRequestUpdated into the database.
Es funktioniert, wenn es einen Wert gibt, aber anscheinend kann man nicht stecken Sie nichts in einen Datum/Zeit-Feld in Access. Ich glaube, ich könnte eine zweite insert-Anweisung, die sich nicht einfügen in date_updated
(zu verwenden, wenn es keinen Wert indate_updated
), aber das ist der einzige Weg, es zu tun? Scheint, wie es sein sollte, ein leichter/weniger redundante Weise.
BEARBEITEN:
Okay. Also habe ich versucht, das einfügen von SqlDateTime.Null, Nichts, und DBNull.Wert. SqlDateTime.Null ergibt den Wert 1/1/1900 in die Datenbank eingefügt. "Nichts" bewirkt, dass es zu legen 1/1/2001. Und wenn ich versuche, verwenden Sie DBNull.Wert, es sagt mir, dass es nicht in eine Zeichenfolge konvertiert werden, so dass ich vielleicht nicht etwas tun, ganz Recht. Jedenfalls, ich hatte gehofft, dass, wenn es nichts zum einfügen, die das Feld in Access würde leer bleiben, aber es scheint, dass es hat, um ihn zu füllen mit etwas...
BEARBEITEN:
Bekam ich DBNull.Wert zu arbeiten, und es tut fügen Sie ein komplett leerer Wert. So dies ist meine Letzte funktionierende code:
Dim hfDateRequestUpdated As HiddenField = FormView1.FindControl("hfDateRequestUpdated")
Dim myDateRequestUpdated = Nothing
If hfDateRequestUpdated.Value = Nothing Then
myDateRequestUpdated = DBNull.Value
Else
myDateRequestUpdated = DateTime.Parse(hfDateRequestUpdated.Value)
End If
Vielen Dank an alle!
- Ich verstehe nicht, warum es war ein downvote auf diese Frage. Ich habe das umgedreht, aber ich bin immer noch verwirrt.
- Ich schliesse mich, dies ist eine interessante Frage. Diese Datumsfelder immer mich beißen.
- Könntest du ein code-Beispiel zeigen, wie Sie das einfügen der Daten?
- Sorry, Sie haben nicht immer die Hilfe, die Sie brauchen. Die Lösung unten, dass Sie versucht zu implementieren geschrieben wurde, eine völlig andere Sprache. Sie sollten Ihren code zurück zu dem, was es war in der Zwischenzeit. Fühlen Sie sich frei, um downvote der Antwort zu helfen, andere Benutzer erkennen, dass es falsch ist. Sie werden eher um Hilfe zu erhalten wenn keine von Ihnen positiv bewertet werden Antworten auf diese Frage noch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sara, haben Sie versucht, Gießen Sie das Datum/Zeit, bevor Sie es aktualisieren? Die Daten Stimmen nicht überein Fehler kommt wahrscheinlich von der Tatsache, dass die
hfDateRequestUpdated.Value
Sie versuchen, einfügen in die Datenbank nicht mit der Spalte Typ.Versuchen Sie es schrittweise durch den code und sehen, was die Art der Wert ist. Wenn Sie finden, dass es ein string ist (es scheint, dass es sein könnte, da es aus einem Feld in einem Formular), dann benötigen Sie ein prüfen Sie zuerst, um zu sehen, ob das Feld eine leere Zeichenfolge (
VBNullString
). Wenn ja, werden Sie wollen, um den Wert zu ändern, du bist das einfügen in die Datenbank zuDBNull
, die Sie bekommen können in VB.Net mitDBNull.Value
.Können wir nicht den code sehen, so wissen wir nicht genau, wie du den Wert in der Datenbank, aber es würde in etwa so Aussehen
Beachten Sie, dass der obige test funktioniert nur, wenn der Wert ein, den Sie aus dem HiddenField ist eine Zeichenfolge, die ich glaube, es ist nach dem Dokumentation. Das ist wahrscheinlich, wo alle diese Mühe, du bist kommt. Sie sind implizit konvertieren Sie Ihre Datum - /Zeit-Werte in einen string (was einfach ist), aber implizit die Konvertierung zurück ist nicht so einfach, vor allem, wenn der erste Wert war
DBNull
beiseite
Ich denke, was Marshall wurde versucht zu suggerieren, war das äquivalent zum obigen code wird aber in einer Verknüpfung Ausdruck bezeichnet den "ternären operator", die aussieht wie diese in VB.Net:
Ich würde nicht empfehlen es aber, da es verwirrend für neue Programmierer, die syntax änderte sich in 2008 aus
IFF(condition ? trueResult : falseResult)
Ihren code
hat ein paar Probleme:
myDateRequestUpdated
zuDateTime
Sie können nicht ein DbNull.Wert in es.()
für DbNull.Wert: es ist eine Eigenschaft, keine Methode (ich weiß nicht genug, VB, sicher zu sagen):
BetreiberWas Sie wahrscheinlich wollen, ist eine
Nullable(Of DateTime)
zum speichern eines DateTime-Wert, der kann auch fehlen.Dann verwenden Sie etwas wie dieses, um den Wert zu speichern:
Wenn
hfDateRequestUpdated.Value
leer ist, dann verwenden SieNothing
als das Ergebnis; sonst analysieren Sie den Wert als Datum (das könnte scheitern, wenn es kein gültiges Datum!).Versuchen Sie dies: