Announcement

Collapse
No announcement yet.

Parameter ohne Wert

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

  • Parameter ohne Wert

    Moin

    Ich mache den SQL Zugriff mit RowUpdating.
    Ich habe für jede Spalte einen Parameter definiert
    Code:
    Dim cmd As New OleDb.OleDbCommand("UPDATE Tabelle SET ID = ? Betreff = ? ...", conn)
    
    cmd.Parameters.Add("@p1", OleDbType.Variant, 32, "ID")
    cmd.Parameters.Add("@p2", OleDbType.Variant, 4, "Betreff")
    ...
    
    dt.Rows(0)("ID") = 2
    dt.Rows(0)("Betreff") = blabla
    ...
    jetzt ist es leider der Fall das nicht immer bei jedem Parameter immer etwas übergeben werden kann
    zB. Betreff = ""

    wen ich jetzt den Update mache motzt er.
    Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.

    gibt es da eine Möglichkeit den Parametern vorzugeben ob sie NULL sein dürfen.

  • #2
    Für einen nicht vorhanden Parameter (wenn du den beim Set in einer Update Clause verwendest) solltest du DBNull.Value dem Parameter zuweisen.

    Comment


    • #3
      Moin Thx erstmal

      Gibt es da nicht noch einen anderen weg?
      sonst müsste ich bei jedem Eintrag ja noch zuerst überprüfen ob da was drin ist.

      Kann ich zB.
      alle Parameter die NULL sind = DBNull.Value?

      Comment


      • #4
        Du kannst die die Parameter-Klasse ableiten und im Konstruktor den Standardwert (DbNull) setzten.

        Ansonsten bleibt alles gleich.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Gibts in VB keinen ternären Operator?

          Denn anstatt

          Code:
          dt.Rows(0)("Betreff") = blabla
          folgendes (VB Pseudocode falls es einen ternären Operator wie in C# gibt)

          Code:
          dt.Rows(0)("Betreff") = (blabla != null) ? blabla : DBNull.Value
          zu machen finde ich jetzt nicht so aufwendig.

          Comment


          • #6
            Hi,

            zu VB6-Zeiten war das IIF(Bedingung, True-Part, False-Part).

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Danke vielmals für die vielen höflichen Antworten!

              Comment


              • #8
                So sry
                Leider muss ich nochmal so dumm Fragen.

                Leider ist es mit IIF aus irgend einem Grund nicht möglich.

                Code:
                IIf(dt.Rows(0)("Betreff") = Nothing, dt.Rows(0)("Betreff") = DBNull.Value, dt.Rows(0)("Betreff") = blabla)
                beim DBNULL.Value motz er leider das diese nicht definiert seien

                So geht es:

                Code:
                                If dt.Rows(0)("Betreff") = Nothing Then
                                    dt.Rows(0)("Betreff") = DBNull.Value
                                Else
                                    dt.Rows(0)("Betreff") = blabla
                                End If
                ist bei ca 20 Einträgen und 3 verschiedenen DurchlaufProzeduren aber extremste unübersichtlich.

                @Gü Leider konnte ich nicht herausfinden wie ich dem Parametern ein Standardwert zuweisen kann.
                DefaultParameterValue hab ich gefunden kanns aber ned anwenden.

                Comment


                • #9
                  Hi,

                  probiers mal so:
                  [highlight=vb.net]
                  dt.Rows(0)("Betreff") = IIf((blabla IsNot Nothing), blabla, DBNull.Value)
                  [/highlight]

                  mfG Gü
                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                  Comment


                  • #10
                    Danke Gü das hat so geklappt

                    Leider geht der Update immer noch nicht auch wenn in jedem Parameter entweder "Daten" oder DBNull.Value steht.

                    Wen es klappen würde, würde dann in den Feldern in denen etwas gestanden hat und beim Update DBNull.Value übergeben wird werden die Felder dann gelöst? oder bleiben die so wie sie waren?

                    Wen jemand noch einen Tipp für mich hätte währe ich super dankbar.

                    Comment


                    • #11
                      Die Werte in der Datenbank sollten bei DBNull.Value auf null gesetzt werden.

                      Leider geht der Update immer noch nicht
                      Wenn wir dir helfen sollen ist es nicht hilfreich wenn du Informationen für dich behälst. Was klappt nicht und wie außert sich das? Exceptions, die Daten in der DB ändern sich nicht, es passiert etwas anderes als du erwartest hast etc. Du mußt schon mehr rausrücken.

                      Comment


                      • #12
                        Sry da ging wohl etwas beim Schreiben verloren.

                        Es gibt immer noch den gleichen Fehler beim Update Befehl heraus.

                        Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.

                        es müssten aber alle mit entweder DBNull.Value eingetragen sein oder Daten.

                        Comment


                        • #13
                          Ich dachte bisher du benutzt igendwo im nicht gezeigten Code einen DataAdapter. Ich vermute aber mal das tust du nicht sondern benutzt den OleDbCommand zum updaten direkt? Wenn das so ist wie hast du den die Daten aus denn Rows deiner Datatable in die Parameter des Commands kopiert? oder bist du noch ganz anders vorgegangen?

                          Comment


                          • #14
                            Er verwendet OleDB - wurde aber schon darauf hingewiesen: http://entwickler-forum.de/showthrea...915#post178915
                            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                            Comment


                            • #15
                              Danke Gü.
                              Hilft mir jetzt aber noch nicht wirklich um das ganze zu verstehen.
                              Kannst du(BlackBonsai) mal die ganze Update Methode zeigen? Dann bekommen wir hoffentlich genug Übersicht das Problem zu sehen.

                              Comment

                              Working...
                              X