Abrufen der ID eines neu eingefügten SQL Server-Datensatzes mit C# MVC 4
Problem:
Wie fügt man mit C# in einer MVC 4-Anwendung Daten in eine SQL Server-Tabelle ein und erhält dann die ID des neu hinzugefügten Datensatzes?
Lösung:
Abhängig von Ihrer SQL Server-Version gibt es zwei Hauptansätze:
SQL Server 2005 und höher:
Die effizienteste Methode für SQL Server 2005 und nachfolgende Versionen nutzt die OUTPUT
-Klausel:
<code class="language-csharp">using (SqlCommand cmd = new SqlCommand("INSERT INTO Mem_Basic(Mem_Na, Mem_Occ) OUTPUT INSERTED.ID VALUES (@na, @occ)", con)) { // ... parameter assignments for @na and @occ ... int newId = (int)cmd.ExecuteScalar(); return newId; }</code>
Diese einzelne SQL-Anweisung fügt die Daten ein und gibt sofort die neu generierte ID zurück.
Ältere SQL Server-Versionen (vor 2005):
Für ältere SQL Server-Versionen benötigen Sie eine zweiteilige Abfrage: eine INSERT
-Anweisung, gefolgt von SCOPE_IDENTITY()
:
<code class="language-csharp">using (SqlCommand cmd = new SqlCommand("INSERT INTO Mem_Basic(Mem_Na, Mem_Occ) VALUES (@na, @occ); SELECT SCOPE_IDENTITY();", con)) { // ... parameter assignments for @na and @occ ... int newId = Convert.ToInt32(cmd.ExecuteScalar()); return newId; }</code>
Dieser Ansatz fügt zuerst die Daten ein und verwendet dann SCOPE_IDENTITY()
, um die ID der zuletzt eingefügten Zeile innerhalb der aktuellen Sitzung und des aktuellen Bereichs abzurufen. Beachten Sie, dass SCOPE_IDENTITY()
nur für die aktuelle Sitzung und den aktuellen Bereich funktioniert. Wenn also mehrere Einfügungen gleichzeitig erfolgen, kann es zu unerwarteten Ergebnissen kommen.
Denken Sie daran, Mem_Basic
, Mem_Na
und Mem_Occ
durch Ihre tatsächlichen Tabellen- und Spaltennamen zu ersetzen. Stellen Sie außerdem sicher, dass die Parametrisierung korrekt ist, um Schwachstellen durch SQL-Injection zu vermeiden. Die // ...
-Abschnitte geben an, wo Sie Ihren Parametriercode mit cmd.Parameters.AddWithValue(...)
.
Das obige ist der detaillierte Inhalt vonWie rufe ich die ID eines neu eingefügten Datensatzes in SQL Server mit C# MVC 4 ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!