Announcement

Collapse
No announcement yet.

TableAdapter Insert mit NULL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TableAdapter Insert mit NULL

    Hallo,

    irgendwie beiß ich mich grad mit nem Problem rum was bestimmt jeder schon mal hatte nur find ich keine Lösung.

    Ich hab ein Form auf dem einige Textfelder und einige DateTimePicker sind.
    Die Datetimepicker sind alle .showcheckbox geschaltet
    Die Daten werden bei Click in die DB gegeben.

    Problem ist jetzt das es vorkommen kann das eines der Datumsfelder nicht gefüllt wird und damit der Wert für die DB auch NULL sein soll.
    Das Insert passiert ganz normal:
    Code:
    TableAdapter.InsertNewMA(Arbeit)
    
            Dim Arbeit As Object = System.DBNull.Value
            If BoxArbeit.Checked = True Then
                Arbeit = BoxArbeit.Value
            Else
                Arbeit = DBNull.Value
            End If
    nur wie übergebe ich ihm hier das NULL denn er meckert mich an:
    Die angegebene Umwandlung ist ungültig
    Lass ich den Typ für Arbeit aber auf Datetime meckert er auch das er NULL nicht zu DateTime convertieren kann.

    HILFE...
    Ich hab keine Ahnung was ich tue aber ich will es lernen

  • #2
    so jetzt hab ich es so versucht das ich im InsertStatement direkt schon 'NULL' eingetragen habe und bekommen:
    Fehler beim Konvertieren einer Zeichenfolge in den smalldatetime-Datentyp.

    es muss doch eine Lösung geben. Kann mir bitte jemand helfen, es ist relativ dringend.

    DANKE
    Ich hab keine Ahnung was ich tue aber ich will es lernen

    Comment


    • #3
      Das betroffene Feld in der Datenbank ist das überhaupt nullable? Wenn dem so ist und der Dataset Wizard das erkannt hat sollte die InsertNewMA Methode von diesem auch mit einem Nullable Type als Parameter definiert worden sein.

      Also theoretisch so

      [Highlight=VB.Net]Public Function InsertNewMA(ByVal Arbeit As Nullable(Of MeinLieberArbeitTyp)) AS Integer[/Highlight]

      Mit DBNull.Value musst du hier jedenfalls nicht hantieren (in jeder vernünftig typisierten Sprache würde hier auch der Compiler bereits meckern) sondern mit null/nothing. Das umsetzen in DBNull.Value macht der generierte Code wenn denn die Spalte in der Datenbank nullable ist und der Wizard das auch erkannt hat.

      Comment


      • #4
        Hallo...

        @Ralf: ersteinmal Dank für den letzten Post, ja das Feld ist nullable
        gelöst hatte ich es seiner Zeit über einen Umweg:
        Code:
                If versand.CheckState = CheckState.Checked Then
                    Try
                        Me.TableAdapter.Insert(Feld1, Feld2, Feld3, Feld4)
                    Catch ex As Exception
                        MsgBox(ex.Message)
                    End Try
                Else
                    Try
                       Me.TableAdapter.Insert(Feld1, Feld2, Feld3, Nothing)
                    Catch ex As Exception
                        MsgBox(ex.Message)
                    End Try
                End If
        Damit wird dann das Feld also ohne Zustand also als ordentlichen NULL in der DB angenommen.

        aktuell habe ich aber einen TableAdapter (ca. 20 Felder) der etwas umfangreicher ist und wo ich bei einigen Feldern (ca. 18 von 20) ein evtl. Null übergeben muss.

        Jetzt wollte ich ehrlich gesagt keine 18 Variationen des obigen Musters bastelln...

        Theoretisch will ich den StringVariablen die Feldwerte zuweisen, und dann checken ob da was drin steht und wenn nicht soll ein Nothing/NULL durch den Tableadapter rauschen...

        Natürlich kann ich auch einen Leerstring in Form von "" übergeben, aber ehrlich gesagt find ich das mehr als doof...

        Hat noch jemand ne Idee???
        Ich hab keine Ahnung was ich tue aber ich will es lernen

        Comment


        • #5
          Hat noch jemand ne Idee???
          Das Problem habe ich noch nicht verstanden. Wenn z.b. in deinem Code dein Feld4 Variable nullable ist dann schreib einfach nothing in Feld4 rein und übergebe das an den Tableadapter. Wofür die Verzweigung? Und wenn du von strings spricht die können eh von Haus aus schon NULL(Nothing) sein brauchst dann noch nicht mal einen explizite nullable Variable.

          Comment

          Working...
          X