Forums Neueste Beiträge
 

ADO .NET - ID eines neuen Datensatzes?

31/01/2008 - 16:19 von Helmuth Helmes | Report spam
Hallo,

Bisher habe ich mit dem uralten DAO auf eine lokale 1-Benutzer Access
Datenbank zugegriffen.
Im Gegensatz zu ADO.NET bleibt dort beim Zugriff ja die Verbindung bestehen
weshalb folgendes Prima funktioniert:


Dim ID as Long
Dim tb As Recordset
Set tb = db.OpenRecordset("SELECT * FROM Tabelle", dbOpenDynaset)
tb.AddNew
tb!Name = "Test"
ID = tb!ID
tb.Update


Ich lege also einen neuen Datensatz an, das Feld ID bekommt automatisch
einen neuen, einzigartigen Schlüssen zugewiesen, ich schreibe meine Daten in
die neue Zeile und lese gleichzeitig den zukünfitgen Schlüssel aus bevor ich
mit .Update die Transaktion abschliesse. Vorteil für mich, ich weiss sofort
welcher Datensatz zuletzt angelegt wurde und kann darauf die komplette
verarbeitung meines Programmes aufbauen. (Im einfachsten falle Selektieren
des neu angelegten Elementes in einer Tabelle)

Wie bekomme ich jetzt ein àhnliches Verhalten unter .NET Zugange?

Wenn ich mit dem OleDb.OleDbCommand einen "Insert Into Tabelle (Name)
Values('Test')" mit ExecuteNonQuery() schicke, wird der neue Datensatz zwar
ordnungsgemàß mit einer neuen ID angelegt. Ich tappe aber blind durch die
Landschaft weil ich nicht weiss welche ID der neue Datensatz hat. :-)

Das find ich nicht gut. Schliesslich wàre es ja sinn der ID einen Datensatz
eindeutig zu identifizieren... was sagt da der Profi?

cu
Helmuth
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
31/01/2008 - 17:33 | Warnen spam
Hallo Helmuth,

"Helmuth Helmes" schrieb:

Wenn ich mit dem OleDb.OleDbCommand einen "Insert Into Tabelle (Name)
Values('Test')" mit ExecuteNonQuery() schicke, wird der neue Datensatz zwar
ordnungsgemà¤àŸ mit einer neuen ID angelegt. Ich tappe aber blind durch die
Landschaft weil ich nicht weiss welche ID der neue Datensatz hat. :-)



SELECT SCOPE_IDENTITY()

oder

SELECT @@IDENTITY

nach dem INSERT Statement mit <Command>.ExecuteScalar( ... ) absetzen und
den Rückgabewert auslesen. Achte aber darauf, dass dieselbe Verbindung
verwendet wird wie für das INSERT Statement.

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen