C # + SQL Server ExecuteScalar () gibt die zuletzt eingefügte ID nicht zurück

8

Ich habe die folgende Funktion, die eine Abfrage ausführt und true bei Erfolg und false bei Fehler zurückgibt. Nein Ich wollte die Methode so erweitern, dass bei jeder einzufügenden Einfüge-Abfrage die Klasse var insertId die ID der zuletzt eingefügten Zeile enthält.

Das Problem ist, dass insertId immer 0 ist, also gibt die executeScalar() die ID nicht zurück.

Irgendwelche Ideen? Oder andere Lösungen, um die ID der letzten Einfügeabfrage zu erhalten ....

%Vor%     
jhoevenaars 04.12.2011, 12:18
quelle

2 Antworten

17

Sie sollten Ihre INSERT ändern, um diese eingefügte ID sofort an Sie zurückzugeben (in einer OUTPUT -Klausel)! Dies funktioniert ab SQL Server 2005 - Die OUTPUT -Klausel ist in SQL Server 2000 oder früher nicht verfügbar (Sie haben nicht angegeben, welche Version von SQL Server Sie in Ihrer Frage verwenden.) .). Weitere Informationen zur OUTPUT -Klausel in der MSDN-Onlinedokumentation finden Sie hier.

Ändern Sie Ihre Einfügung wie folgt:

%Vor%

und dann, wenn Sie Ihre insert-Anweisung von C # ausführen, sollten Sie tun können:

%Vor%

und Ihre result Variable sollte jetzt den richtigen, neu eingefügten Wert enthalten!

    
marc_s 04.12.2011, 12:22
quelle
2

Versuchen Sie SCOPE_IDENTITY () anstelle von @@ IDENTITY. Wenn das nicht funktioniert, können Sie das Tabellenschema und die einzufügende Abfrage hochladen.

    
Stephen Turner 04.12.2011 12:22
quelle

Tags und Links