ADO.NET/SQL-Server 2005 Express: Parallelitätsverletzung bei Unique-Spalte



  • Hallo,

    ich habe wiedermal ein (kleines) Problemchen:

    In einer Datenbank habe ich eine Unique-Spalte. Mit ADO.NET und automatischer Datenbindung (TableAdapter.Update() usw) habe ich eine Verbindung, DataSet usw herstellen lassen und rufe gespeicherte Prozeduren auf; beim Start der Anwendung werden die ersten 100 Datensätze zur Anzeige geladen.
    Beim Speichern der Datenbank (resp. Update) werden Fehler abgefangen (try-catch) und zur Anzeige gebracht.

    Nun ist es so, dass wenn man 2 Mal den selben Eintrag in die Spalte mit der Unique-Einschränkung eingibt entweder kommentarlos ein Eintrag verschwindet (ich dachte das DataGridView würde da mit einem ErrorProvider melden), oder manchmal (z.B. wenn man einen Eintrag ändert dass er gleich lautet wie ein bestehender) erscheint beim Speichern dann die MessageBox (plus ErrorProvider) (Exception.Message: "Parallelitätsverletzung: der UpdateCommand hat sich auf X Einträge ausgewirkt"). Das ist ja auch ein gewünschtes Verhalten.

    Nur dumm ist, wenn ich dann den Eintrag wieder ändere, auf einen welcher OK ist und keine doppelten mehr vorkommen dann erscheint die Meldung eben DOCH noch, und zwar jedesmal wieder. Der auf OK abgeänderte Eintrag wird nicht gespeichert.
    Wie kann ich das umgehen/behandeln? Das ist eigentlich das Standardverhalten des automatisch generierten Datenbindung-Code, aber so ja nicht wirklich gut...

    Danke!



  • ..der Code ist der übliche:

    bAenderungen = false;
                try
                {
                    this.Validate();
                    this.dVDsBindingSource.EndEdit();
                    this.dVDsTableAdapter.Update(this.dVDsDBDataSet.DVDs);
                }
                catch (Exception ex)
                {
    
                    MessageBox.Show("Fehler beim Speichern. Überprüfen Sie die Datensätze; es dürfen z.B. keine zwei gleichen Einträge in der Titel-Spalte vorhanden sein.\n" + ex.Message + "\n" + ex.InnerException, "Achtung, Fehler beim Speichern", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
    

    Muss/kann ich da etwas zurücksetzen damit der Fehler nicht immer wieder auftritt, und/oder ein Ereignis bzw. Exception eines anderen Objektes behandeln damit die Zeilen nicht einfach verschwinden?

    Vielen Dank


Log in to reply