Datenbanken

Maxii

Mitglied
Ich mache einen Insert auf irgendeine Tabelle.
Die Tabelle selbst hat eine ID-Spalte, welche eindeutig die ID's vergibt.
Nach dem Insert Befehl möchte ich die vergebene ID auslesen.
geht das irgendwie, außer mit einem anschließenden Select-Befehl?
Mfg
Markus Gruber
 
Naja, sollte eigentlich egal sein, oder?
weil ich immer mit .ExecuteNonQuery() die Anweisung schicke.
Aber trotzdem:
- MSSQL Server
- MySQL
- Access
sollte wenn möglich bei allen 3 funktionieren.
 
Code:
SELECT @@IDENTITY as lastid ...

Das funktioniert sicher bei MSSQL und bei MySQL 4 (obs bei 3 auch schon geht, weiß ich nicht, hab ich auch nicht getestet). Unter Access wird diese Variante wohl nicht gehen ...

Wenn Du es mit einem nachfolgenden Select machst, solltest die Tabelle allerdings locken, immerhin könnte es ja sein, dass bereits ein weiterer Datensatz in der Zwischenzeit eingefügt wurde. Das Locken hat dann allerdings auch wieder Nachteile (Performance etc.)
 
Hi

Unter Access wüßte ich es nicht . Meiner Meinung nach geht das da nur mit anschließendem SELECT Befehl !

Wenn jemand was anderes weiß dann heraus damit ! :)

DarkGreetinx LordDeath
 
Naja, andere Richtung geht auch:

1) Lock auf die Table setzen
2) Letzte ID auslesen und 1 addieren
3) Insert schreiben
4) Lock aufheben
 
Bei MySQL kann man die letzte eingefügte ID mit LAST_INSERT_ID() ermitteln.

Chris
 
Ich danke für die Antworten, aber das ist alles so "kompliziert".
Ich mein jetzt nur programmiertechnisch.
Der Befehl ExecuteNonQuery() liefert mir die Anzahl der Reihen zurück, welche mit diesem Insert Befehl( meistens 1) zurück. Damit fang ich nichts an und da dachte ich dass es eine vernünftige Antwort gibt. Da hab ic mich wohl getäuscht.
Mit den oben genannten Vorschlägen, bleibt das ganze System nun langsam.
 
Zurück