Fehler bei Aktualisierung von Datensätzen

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

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Fehler bei Aktualisierung von Datensätzen

    Hallo,,

    ich habe bei einem meiner Formulare ein Problem was ich mir absolut nicht erklären kann. In meiner Datenbank gibt es eine Tabelle für Auftraggeber mit ca 20 Feldern. Diese sind in einem Formular an die entsprechenden Steuerelemente (Textbox, Combobox usw) gebunden.
    Bei den Daten handelt es sich um unsere Auftraggeber, welche wir zwischen interne und externe unterscheiden. Manche Felder sind nicht für beide Auftraggeberarten relevant, diese setze ich je nach Art auf Enabled = False. Diese sind in der Datenbank auch nicht als NotNull-Felder markiert, sie können also leer bleiben.
    Bei 2 Feldern (OEKurz, OELang), die in diese Kategorie fallen habe ich allerdings Probleme. Diese Felder sind in der Datenbank mit VarChar(45) hinterlegt, also Textfelder. Im Formular benutze ich allerdings Comboboxen, welche die bisher eingegeben Werte in diesen Feldern als Auswahlmöglichkeit enthalten.
    Bei internen Auftraggebern muss dieses Feld befüllt werden, bei externen nicht. Hier sind die Comboboxen also deaktiviert. Lege ich jetzt einen neuen Datensatz an (egal ob interner oder externer Auftraggeber) funktioniert alles. Bearbeite ich dann allerdings den Datensatz eines externen Auftraggebers bekomme ich folgende Fehlermeldung:
    System.Data.DBConcurrencyException
    {"Parallelitätsverletzung: Der UpdateCommand hat sich auf 0 der erwarteten 1 Datensätze ausgewirkt."}


    Anbei noch der Code, welchen ich zum speichern benutze. Dieser ist auf das wesentliche reduziert um alle anderen potenziellen Fehlerquellen auszuschließen:

    Quellcode

    1. If IsNothing(Me.TblSdAuftraggeberBindingSource.Current) Then Return True
    2. Me.TblSdAuftraggeberBindingSource.EndEdit()
    3. If Me.DbLeiKaDataSet.HasChanges Then
    4. Me.TblSdAuftraggeberTableAdapter.Update(Me.DbLeiKaDataSet.tblSdAuftraggeber)
    5. End If
    6. Return True


    Wenn der Fehler auftritt bleibt der Code in Zeile 6 stehen. Da ich immer nur die Bearbeitung eines Datensatzes zulasse und auf diesem Formular auch nur die eine Tabelle verwende kann sich das "HasChanges"-Event auf keine andere Tabelle beziehen.

    Kurz zusammengefasst: Bei zwei Tabellenfeldern, welche NULL-Werte enthalten können klappt das Aktualisieren des Datensatzes nicht, wenn diese NULL sind. Beim anlegen gibt es allerdings keine Probleme.

    Vielleicht hat von euch einer eine Idee woran das liegen könnte.

    Gruß, André
    Diese Parallelitätsverletzung kommt, wenn zwischen Fill() und Update()
    *) entweder dein Programm
    *) oder ein anderer User im Netzwerk
    den Datensatz geändert hat...
    Data Grid View und Selected Content

    VB.NET-Quellcode

    1. If IsNothing(Me.TblSdAuftraggeberBindingSource.Current) Then Return True
    2. 'mach lieber
    3. If Me.TblSdAuftraggeberBindingSource.Current Is Nothing Then Return True
    Es ist das einzige Formular was offen ist und ich bin der einzige Nutzer der drin ist. Es wird auch exakt die gleiche Funktion beim speichern bei internen und externe Auftraggebern verwendet. Also eigentlich kann ich eine Veränderung des Datensatzes ausschließen.

    Deine vorgeschlagene Änderung setze ich gerne um. Gibt es einen Grund warum die Is Nothing abfrage auf diese Art erfolgen sollte?

    Edit: Ich habe jetzt zwischenzeitlich das Formular neu gebaut, die Tabelle neu ins Dataset eingebunden, jetzt klappt es. Da hat sich das System wohl irgendwann mal verschluckt, anders kann ich es mir nicht erklären. Trotzdem vielen Dank für deine Hilfe. Die Sache mit dem Is Nothing interessiert mich aber immer noch ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „AndPod“ ()