DateTimePicker hat DBNULL und kann nicht gespeichert werden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von DrZwockel.

    DateTimePicker hat DBNULL und kann nicht gespeichert werden

    Hallo VB-Gemeinde,

    ich habe ein Problem bei der Speicherung in die Oracle Datenbank.

    Folgende Parameter sind gegeben:

    In der Oracle-Datenbank gibt es ein Datenbankbankfeld, das als DATE definiert ist, ea darf auch NULL sein.

    In meiner Anwendung wird aus diesem Feld ein Control (DateTimePicker) gefüllt. Da noch nichts drin steht, bleibt das VALUE im DateTimePicker leer. So weit, so gut.

    Jetzt kommen wir zu meinem Problem. Beim Zurückspeichern, also dem Update-Vorgang, gibt es eine Exception, dass DBNULL nicht gespeichert werden kann.

    Der Update-Prozess erfolgt über PARAMETER an Oracle ...

    VB.NET-Quellcode

    1. ...
    2. SQLCMD.Parameters.Add(New OracleParameter("p_F1_DATUM", OracleDbType.Date, CDate(txtF1Datum1.Value), ParameterDirection.Input))
    3. ...


    Die Übergabe dann in den SQL-String erfolgt hier:

    VB.NET-Quellcode

    1. ...
    2. Dim SQL_SB As New StringBuilder
    3. '
    4. SQL_SB.Append("UPDATE ")
    5. SQL_SB.Append("TESTTABELLE")
    6. SQL_SB.Append("SET ")
    7. ...
    8. SQL_SB.Append("F1_DATUM = :p_F1_DATUM, ")
    9. ...


    Zu diesem Zeitpunkt wurde nichts mit dem DateTimePicker gemacht, also kein Wert eingetragen. Er enthält somit immer noch das NULL aus der Datenbank.

    Beim Updatevorgang erhalte ich dann die Fehlermeldung:

    VB.NET-Quellcode

    1. Ungültige Konvertierung von Typ DBNull in Typ Date.



    Lese ich den PARAMETER 'p_F1_DATUM' aus, so steht dort {}.

    Ich bekomme es nicht hin, diesen Fehler zu beseitigen. Hat jemand eine Idee? In Google gibt es Änsatze aber alle funktionieren bei mir nicht ...


    Vielen Dank!

    Der Doc
    @DrZwockel Dann musst Du .Value auf DbNull abfragen und dann auf DateTime.Minimum oder so setzen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    DateTimepicker ist nicht geeignet in Verbindung mit nullable Date-Feldern
    Wenn wolle gugge NullableDateTimePicker - der kann das.
    Wie man das mit Oracle verheiratet weiss ich allerdings nicht - ich hab das einfach mit typDataset ( +Databinding) entwickelt - da kümmern sich geeignete DataAdapter um die Kommunikation mitte Datenbank.
    Hallo ErfinderDesRades,

    dies scheint mir die zu suchende Lösung zu sein. Ich habe gerade auf meinem Laptop die DLL kompiliert und schon mal in eine Testform eingebaut.

    In der nächsten Woche werde ich dann mal das Control in meinem Projekt auf meiner Entwicklungsmaschine einsetzen und testen. Ich werde dann entsprechend nachberichten.

    Vielen Dank für die Hilfe und die Info, dass das normale DateTimePicker Control kein nullable-Feld unterstützen.

    @ RodFromGermany: Auch Dir vielen Dank für Deine Hilfe

    Gruß vom Doc@



    Das Problem konnte leider trotz Hilfestellung (Dank hierfür) nicht zufriedenstellend gelöst werden.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DrZwockel“ ()