Frage zu ConstraintExceptoin bei einer Select-Anweisung

28/08/2008 - 09:56 von M.Erlinger | Report spam
Hallo

ich habe bei meinem DataSet eine neue DataTable hinzugegeben, die nur zur
Abfrage von Daten bestimmt ist, und das Select-Statement enthàlt eine LEFT
OUTER JOIN Verknüpfung.

Jetzt bekomme ich die Fehlermeldung beim Fill










Einschrànkungen konnten nicht aktiviert werden. Mindestens eine Zeile
enthàlt Werte die die Einschrànkungen non-null, unique or foreign-key
verletzen.
<<<<

Wenn ich vorher "dsAdress.EnforceConstraints = false;" setze, umgehe ich die
Fehlermeldung, aber beim Grid steht bei den Zeilen ein Rufzeichen vorne
dabei;
und außerdem was bewirkt das "EnforceConstraints = false" auf meine
bestehenden DataTables, die schon bereits in Verwendung sind.

kann mir dazu bitte jemand weiterhelfen ??
Danke und Grüsse
Michael
 

Lesen sie die antworten

#1 Elmar Boye
28/08/2008 - 18:04 | Warnen spam
Hallo Michael,

M.Erlinger schrieb:
ich habe bei meinem DataSet eine neue DataTable hinzugegeben, die nur
zur Abfrage von Daten bestimmt ist, und das Select-Statement enthàlt
eine LEFT OUTER JOIN Verknüpfung.



Ohne die Daten zu kennen ist es schwer den Verursacher zu bestimmen.
Vermutlich muß die Abfrage geàndert werden, denn LEFT JOIN
wàre in einer DataSet Hierarchie eher ungewöhnlich.
Schau Dir mal die gelieferten Daten über die Datenvorschau
oder eine externes Tool an.


Jetzt bekomme ich die Fehlermeldung beim Fill







Einschrànkungen konnten nicht aktiviert werden. Mindestens eine Zeile
enthàlt Werte die die Einschrànkungen non-null, unique or foreign-key
verletzen.
<<<<



Deine Daten erfüllen nicht die Bedingungen, die durch die
Einschrànkungen festgelegt wurden.
Die Meldung besagt im wesentlichen schon alles.
Für Spalten wird die Ausnahme auch geworfen, wenn die
MaxLength Bedingung nicht erfüllt wird.

Bei einer Abfrage mit LEFT JOIN können das potentiell mehrere Übeltàter sein.
Zum einen können dabei Zeilen doppelt geliefert werden,
was die Primary Key bzw. Unique Einschrànkung verletzen würde.
Oder es wird bei den Spalten NULL geliefert, was für Primàrschlüssel
nicht zulàssig ist und auch dazu führen kann das Fremdschlüssel
Einschrànkungen nicht gültig sind.

Wenn ich vorher "dsAdress.EnforceConstraints = false;" setze, umgehe ich
die Fehlermeldung, aber beim Grid steht bei den Zeilen ein Rufzeichen
vorne dabei;



Das Grid zeigt den Zeilenfehler (DataRow.RowError) an,
der beim Überprüfen gesetzt wird.
Wenn der Fehler bei allen Zeilen auftaucht,
so dürfte die Abfrage generell ein Problem haben.

und außerdem was bewirkt das "EnforceConstraints = false" auf meine
bestehenden DataTables, die schon bereits in Verwendung sind.



EnforceConstraint = false deaktiviert die Überprüfung der
Einschrànkungen und wird üblicherweise nur beim Laden eingesetzt,
wenn temporàr die Bedingungen nicht erfüllt werden könnten
und erhöht die Geschwindigkeit beim Ladevorgang.
Weshalb es die DataAdapter von Haus aus schon beim Laden
deaktivieren und am Ende reaktivieren.

Ist es dauerhaft deaktiviert, so können ungültige Daten eingegeben werden.
Zum Beispiel doppelte Daten (für Unique, Primary) oder solche bei
denen es keine Referenz (Foreign Key) gibt.
Was dann spàtestens beim Speichern zu einem Fehler auf Seiten
der Datenbank führt.
Weswegen man das nicht dauerhaft aktivieren sollte.

Gruß Elmar

Ähnliche fragen