Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Problem mit SQL
AdrianK - Do 21.08.08 13:12
Titel: Problem mit SQL
Hallo,
ich programmiere gerade eine einfache Adressverwaltung in C#. Die Daten speichere ich in einer SQLServer Compact Datenbank. Jeder Datensatz hat eine eigene ID die automatisch zugeordnet wird (mit Identität: true, IdentityIncrement:1 und IdentitySeeed:1) Das navigieren in der Datenbank funktioniert damit sehr gut, ebenso das berbeiten, speichern und erstellen von Einträgen. Nur das Löschen funktioniert nicht so wie es sollte. Wenn ich per SQL einen Eintrag mitten in der Datenbank lösche bleibt sozusagen ein ID "Loch" übrig, das heist die ID Liste wird unterbrochen (1,2,Hier ist das loch, 4,5..) Somit, kann ich nicht mehr ohne Fehler navigieren.
Wie kann ich also SQL veranlassen, die IDs neu zu berechnen/zuzuordnen? Danke schonmal! (Ich hoffe ich habs verständlich erklärt...)
Ralf Jansen - Do 21.08.08 13:21
Was hat die Lückenlosigkeit der ID's mit der Navigationsfähigkeit zu tun?
Die ID sollte nur zur eindeutigen Identifikation eines Datensatzes dienen und sonst nichts!
Primary Keys zu ändern ist eigentlich immer eine schlechte Idee. Wenn diese als Fremdschlüssel in anderen Tabellen benutzt werden sind die Verbindungen nachher falsch oder du müßtest per kaskadierenden Updates durch alle Tabellen rennen und die geänderten ID's nachziehen. Ganz schlecht.
AdrianK - Do 21.08.08 14:12
Zum Navigieren habe ich zwei Buttons, und eine Prozedur zum darstellen eines beliebigen datensatzes mit dessen ID. Dann habe ich in einer Variable die ID des aktuell dargestellten Datensatzes, und beim Klick auf z.B. "weiter" wird dann die Prozedur zum darstellen des Datensatzes aufgerufen. (Zur ID wird 1 dazugezählt...) So funktioniert das auch gut, doch leider geht dies nicht mehr, wenn die IDs eine Lücke haben. Wie könnte man das mit dem Navigieren sonst noch lösen?
Kha - Do 21.08.08 14:24
Mit einer etwas komplizierten SQL-Query könntest du nach der nächsten ID suchen - normalerweise lädt man aber einfach die gesamten Daten auf einmal in ein DataSet, zum Navigieren benötigst du dann keine weiteren DB-Anfragen mehr. Wenn es nicht gerade Zehntausende von Datensätzen sind, sollte das problemlos funktionieren und mit einem BindingNavigator ist die Navigation gleich dabei.
AdrianK - Do 21.08.08 14:31
OK, das mit dem DataSet werd ich mal probieren (bis jetzt hab ich alles ohne Komponenten, nur mit .NET Klassen gemacht...)
Kha - Do 21.08.08 14:37
Probier's aus, es macht wirklich Spaß :D . Der Wizard unter "Daten -> Neue Datenquelle" erledigt das meiste für dich. Dann musst du nur noch die gewünschte Tabelle auf die Form ziehen und fertig.
AdrianK - Do 04.12.08 14:02
Jep, hast recht! Ist wirklich viel einfacher so :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!