Announcement

Collapse
No announcement yet.

DBNull in DataSet

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

  • DBNull in DataSet

    Hallo Zusammen,

    ich scheitere gerade an DBNull. Ich möchte ein Feld in einer MySQL-Datenbanktabelle mit einem Nullwert befüllen. Aber irgendwie will es mir nicht gelingen. Das entsprechende Feld hab ich als Decimal(9,3) deklariert und das Häckchen bei NotNull entfernt.

    Code:
    If DataTable(Reihe).Wert1 is DBNull.value Then
      Messagebox.Show("Wert1 ist DBNull!")
    End If
    Dann bekomme ich jedoch die Fehlermeldung:
    "Is" erfordert Operanden, die Verweistypen haben. Dieser Operand hat jedoch den Werttyp "Decimal".

    Was mache ich falsch bzw. wie mache ich es richtig? Steh grad auf dem Schlauch!

    Gruß und Danke
    Gogat

  • #2
    Ein decimal kann nicht null sein. Dafür müßte es ja ein nullable Typ sein was er nicht ist. Das Wegnehmen des notnull hakens sollte dir eine entsprechende IsFeldNull() Methode generiert haben.

    Code:
    If DataTable(Reihe).IsWert1Null() Then
      Messagebox.Show("Wert1 ist DBNull!")
    End If

    Comment


    • #3
      Vielen Dank für die Info.

      Im Endeffekt hab ich 6 Felder, die entweder nichts oder unterschiedliche Werte enthalten können. Wenn ein Feld DBNull ist, wie kann ich dann das Insert-Command trotzdem durchlaufen? Soll ich dann im DBNull-Fall einfach eine Null wegschreiben oder was mach ich da am Besten?

      Comment


      • #4
        Wenn du das Updaten einem DataAdapter bzw. TableAdapter überläßt hast du damit kein Problem.

        Falls ich dich richtig verstehe und du willst das ganze aber selbst über eine DBCommand machen und mußt nun die Parameter befüllen, würde ich das über einen nicht typisierten Zugriff auf den Inhalt der DataRow machen.
        Also anstatt
        DataTable(Reihe).Wert1
        besser
        DataTable(Reihe)["Wert"]
        dann kannst du einfach zuweisen und mußt dich um die Null Problematik nicht kümmern.

        Comment


        • #5
          Hallo, ich glaub ich verstehe dich nicht ganz.
          Zu Beginn des Programms befülle ich die DataTable folgendermassen:

          Code:
          Dim Tab As New DataSet.DataTable
          Dim Row as DataSet.Row
          
          ' Befüllen der DataTable
          row.spalte1 = "1"
          row.spalte2 = "2" 
          ' usw...
          tab.AddRow(row)

          Zum Ende des Programms schiebe ich dann die Daten der DataTable in meine MySQL-Datenbanktabelle über ein DbCommand (INSERT ....) und sobald dort ein Feld leer ist (DBNull), dann erhalte ich einen Fehler!

          Code:
          DataTable(Reihe)["Wert"]
          Funktioniert bei mir leider nicht. Mit ["Wert"] meinst du schon ein Feld der DataTable, oder? Und nicht das DataTable direkt, sondern die erzeugte Variable.

          Comment


          • #6
            Mit ["Wert"] meinst du schon ein Feld der DataTable, oder? Und nicht das DataTable direkt, sondern die erzeugte Variable.
            Genau, hab nur wieder mal c# und vb durcheinander geworfen. Sorry

            In vb kommst du mit
            Code:
            row("Spalte1")
            an deine Spalten.

            Du sagst du bekommst einen Fehler, welchen denn? Womit wir begonnen haben war ein Compiletime Fehler deine Beschreibung jetzt hört sich mehr nach Runtime an.

            Comment


            • #7
              StrongTypingException wurde nicht behandelt.
              Der Wert für Spalte WERT6 in Tabelle ... is DBNull.

              Mit der Spaltenangabe in der Klammer funktioniert.
              Aber um die Nullproblematik muss ich mich doch trotzdem noch kümmern, oder? Ich weiße den 6 Feldern Werte zu. Wenn diese Null sind bzw. nicht gefüllt werden, sind diese doch DBNull, oder?

              Comment


              • #8
                StrongTypingException wurde nicht behandelt.
                Der Wert für Spalte WERT6 in Tabelle ... is DBNull.
                Sie dir mal ihm DatasetWizzard die WERT6 Spalte an.
                Da steht in der Property 'NullValue' wahrscheinlich (Throw Exception), das solltest du noch ändern.

                Comment


                • #9
                  Hab ich auch schon probiert. Lässt er nicht zu:

                  Ungültiger Eigenschaftenwert!

                  Für nicht als System.String definierte Spalten ist der einzig gültige Wert (Ausnahme auslösen).

                  Das Feld ist als Decimal definiert und ich möchte es ungern als String definieren...

                  Comment

                  Working...
                  X