Announcement

Collapse
No announcement yet.

VB2005 - DBConcurrencyException

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

  • VB2005 - DBConcurrencyException

    Hallo zusammen,
    Ich habe ein DataGridView. Über folgenden Code speichere ich die Änderungen in der Datenbank.


    Code:
    ....
          Try
            daNewData.Update(dtData.GetChanges)
    
          Catch ex As SqlException
            MsgBox(ex.Message, MsgBoxStyle.Critical, "UpdateGrid")
           
          End Try
         ....
    Dies klappt auch alles sehr gut.....

    Angenommen die Tabelle wird auf zwei Clients gleichzeitig angezeigt. Am Client „A“ ändere ich etwas. Am Client „B“ ändere ich in der gleichen Zeile der Tabelle auch etwas. Dann bekomme ich eine Fehlermeldung:

    Code:
    System.Data.DBConcurrencyException wurde nicht von Benutzercode behandelt.
    Die Meldung bekomme ich in folgender Zeile:

    Code:
    daNewData.Update(dtData.GetChanges)
    Obwohl ich diese Zeile durch eine Try/Catch-Block abgefangen habe….

    Hat jemand eine Idee, wie ich das umgehen kann...?

  • #2
    Hallo,

    die Exception DBConcurrencyException wird immer dann ausgelöst, wenn ein Datensatz einer Datenbanktabelle aktualisiert werden soll, deren Feldinhalte bereits von einem (anderen) Benutzer geändert wurden (d.h. in diesem Fall hat die UPDATE-Anweisung keinen Datensatz aktualisiert, weil die logische Filterbedingung des WHERE-Kriteriums nicht erfüllt wurde).

    ...wie ich das umgehen kann...?
    Wenn in der UPDATE-Anweisung im WHERE-Kriterium nur der Primärschlüsselwert der Tabelle verwendet wird, überschreibt jeder Benutzer beim Update-Aufrufe alle eventuellen Änderungen von andereren Benutzern, so dass die DBConcurrencyException nur dann ausgelöst wird, wenn ein anderer Benutzer diesen Datensatz in der Zwischenzeit gelöscht hat.

    Wenn die UPDATE-Anweisung von den Wizards von Visual Studio (SqlDataAdapter bzw. TableAdapter) erzeugt wird, muss dort im Konfigurationsdialog die Checkbox der Mehrbenutzerfähigkeit abgewählt werden, damit nur der Primärschlüsselwert im WHERE-Kriterium genutzt wird.

    Comment


    • #3
      OK....
      Danke...

      Comment

      Working...
      X