Announcement

Collapse
No announcement yet.

ExecuteNonQuery liefert immer -1

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

  • ExecuteNonQuery liefert immer -1

    Hallo,
    ich möchte ein Update auf eine Zeile in meiner Tabelle machen. Wenn die Zeile nicht existiert, soll sie angelegt werden.
    Da ExecuteNonQuery laut Anleitung die Anzahl der vom Update Betroffenen Zeilen zurückgeben soll, hab ich mir das mal so gedacht:

    Code:
    cmd.CommandText = "UPDATE blablabla"
    
                If cmd.ExecuteNonQuery() = 0 Then
                    cmd.CommandText = "INSERT INTO blablabla"
                    cmd.ExecuteNonQuery()
                End If
    Ich hab jetzt alle möglichen Varianten ausprobiert (Zeile gelöscht, Werte gelöscht usw.) aber das Teil liefert mit immer nur "-1" zurück.

    Kann mir jemand nen Tip geben, was ich anders machen muss?

  • #2
    Hallo,

    Einen UPDATE absetzen und wenn der nicht funktioniert einen INSERT machen ist meiner Meinung nach nicht wirklich eine elegante Loesung.

    Ich wuerde vorher einen SELECT auf die ID absetzen - zB mit ExecuteScalar, denn der gibt nur den ersten Wert retour und mehr braucht man hier ja nicht - und wenn eine ID zurueck kommt ist der Datensatz bereits vorhanden, also einen UPDATE und ansonsten einen INSERT Command ausfuehren.
    *-- robert.oh. --*

    Comment


    • #3
      Hallo,

      Kann mir jemand nen Tip geben
      im Kleingedruckten steht, dass ExecuteNonQuery immer dann den Wert -1 zurückliefert, wenn die angesprochene Datenbank bzw. die vorgefundene Konfiguration dieses Merkmal nicht unterstützt. Zum Beispiel ist dies beim MS SQL Server immer dann der Fall, wenn eine Stored Procedure den INSERT ausführen soll, die vor INSERT die Anweisung SET NOCOUNT ON aufruf.

      Einen UPDATE absetzen und wenn der nicht funktioniert einen INSERT machen ist meiner Meinung nach nicht wirklich eine elegante Loesung.
      Ein derartige Ansatz ist jedoch populär - siehe http://en.wikipedia.org/wiki/Upsert. Aus diesem Grund rüstet Microsoft den MS SQL Server 2008 über MERGE mit etwas Vergleichbarem aus.

      Comment

      Working...
      X