Benutzer mit den meisten Antworten
Updaten von Rowguid Spalten nicht mehr möglich!

Frage
-
Hi zusammen,
wir haben ein komisches problem. es hat mal alles super funktioniert, nur seit neuem nicht mehr.
wir haben in unseren Tabellen, spalten bei denen das rowguidcol-Property gesetzt ist. wenn man nun eine neue publication anlegt und auf der clientseite in einem Datagridview einen bestehenden eintrag editiert, kann man diesen eintrag nicht mehr speichern. man bekommt die fehlermeldung : "updating columns with the rowguidcol-property is not allowed. the transaction ended in the trigger. the batch has been aborted!
und wir haben die stelle in dem trigger gefunden die das verursacht :
if update ([ROWGUID]) begin if @@trancount > 0 rollback tran
RAISERROR (20062, 16, -1) enddas ganze passiert in einem trigger der durch die publication angelegt wird : MSmerge_upd_xxx
das komische daran ist, dass das alles vor 2 wochen einwandfrei funktionierte. wir mussten lediglich die publication einmal löschen und eine tabelle kurz editieren und die publication erneut anlegen. doch nach dem neuen anlegen klappte das updaten nicht mehr. man kann zwar in dem datagridview einen neuen eintrag machen und speichern aber nicht updaten. zu erwähnen wäre auch noch, dass das update auf der datenbankseite selbst aber möglich ist.
wir kommen an dieser stelle leider nicht mehr weiter. was den Code auf der clientseite angeht, der dafür sorgt dass die einträge gespeichert werden, haben wir keine änderungen vorgenommen. es ist der selbe code wie vor 2 wochen. wir haben lediglich eine tabelle modifiziert (eine spalte vom typ numeric in int umgewandelt) und die publication neu angelegt. seit dem kracht alles zusammen.
C# Code zum speichern der daten :
this .Validate(); this .i_INSTRS_DEFBindingSource.EndEdit(); try { this .i_INSTRS_DEFTableAdapter.Update(this .idbInstrs.I_INSTRS_DEF); this .i_INSTRS_DEFTableAdapter.Fill(this .idbInstrs.I_INSTRS_DEF); } catch (Exception ex) { MessageBox.Show(ex.Message); }
Die Exception wird bei xxx.Update(xxx) ausgelöst...
Antworten
-
Hallo,
eine Spalte mit der ROWGUIDCOL Eigenschaft kann nicht geändert werden,
weil dann die Replikation die Zeile nicht mehr identifizieren kann
und eine Änderung aus Sicht der Replikation zu einer neuen Zeile (und Konflikten) führen würde.
Siehe auch Erstellen und Ändern von BezeichnerspaltenDas einfachste wäre: Lasst die Spalte beim SqlDataAdapter weg,
so dass sie mit dem hinterlegten Default erzeugt wird
und bei späteren Updates nicht neu gesetzt wird.Gruß Elmar
- Als Antwort markiert Deeeeeeeeeeee Donnerstag, 14. Oktober 2010 11:15
Alle Antworten
-
Hallo,
eine Spalte mit der ROWGUIDCOL Eigenschaft kann nicht geändert werden,
weil dann die Replikation die Zeile nicht mehr identifizieren kann
und eine Änderung aus Sicht der Replikation zu einer neuen Zeile (und Konflikten) führen würde.
Siehe auch Erstellen und Ändern von BezeichnerspaltenDas einfachste wäre: Lasst die Spalte beim SqlDataAdapter weg,
so dass sie mit dem hinterlegten Default erzeugt wird
und bei späteren Updates nicht neu gesetzt wird.Gruß Elmar
- Als Antwort markiert Deeeeeeeeeeee Donnerstag, 14. Oktober 2010 11:15
-
Danke für die Antwort. es klappt natürlich so...
aber so einfach es auch ist, bei uns ist das sehr mühsam, denn wir haben viele tabellen und jede von ihnen besitzt ein rowguid-feld. wenn man durch den datasource-wizard die anbindung zur DB durchführt, übernimmt der wizard natürlich alle felder. d.h. wir müssen im nachhinein hergehen bei jeder einzelnen tabelle, im data source manager von VS das feld mit der rowguidcol-eigenschaft rausnehmen...
gibt es vlt an dieser stelle eine bessere lösung?
besten dank im voraus
-
Hallo,
die "Assistenten" haben keine Ahnung von Spezialfällen im allgemeinen und Replikation im besonderen.
Und ohne manuelle Anpassung wird es dort nicht gehen.Sofern die Anwendung nicht mit der rowguidcol arbeitet, sollte bei der Auswahl ein Abwählen
der Spalte direkt nach dem Auswählen der Tabelle fürs DataSet reichen,
was dann zwei Mausklicks mehr wären.
Alles andere dürfte einiges mehr an Aufwand bedeuten.Gruß Elmar