Wenn man den neuen Wert einer Schlüsselspalte nach dem Einfügen erhlten möchte, bietet sich der SQL-Befehl @@Identity an.
Als Beispiel wird einen Verbindung zu einer Access-Datenbank genutzt:
Spoiler anzeigen
Falls ein anderer Datenbanktyp verwendet werden soll, muss die DLL, die den Zugriff auf die Datenbank steuert ausgetauscht werden.
Dazu muss dann überall im Code OleDB durch die entspechende Information ersetzt werden.
z.B. für den Zugriff auf MS SQL-Server bzw. MS SQL.ServerExpress OleDB durch SQL
Spoiler anzeigen
Als Beispiel wird einen Verbindung zu einer Access-Datenbank genutzt:
VB.NET-Quellcode
- Imports System.Data.OleDb
- Public Class frmTest
- .....
- Private Function SpeichernMitNeuemWert() as int64
- Dim MeinSqlConnection As OleDbConnection = New OleDbConnection(My.Settings.DBConnectionString)
- 'Speichern
- Dim MeinSqlString As String = "INSERT INTO Tabelle(Feld1,Feld2, ....) VALUES (Wert1,Wert2,....)"
- Dim MeinSqlCommand As OleDbCommand = New OleDbCommand(MeinSqlString, MeinSqlConnection)
- MeinSqlConnection.Open()
- Try
- MeinSqlCommand.ExecuteNonQuery()
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- 'ID-Wert auslesen
- MeinSqlString = "Select @@Identity From tTest"
- MeinSqlCommand.CommandText = MeinSqlString
- Try
- Wert = MeinSqlCommand.ExecuteScalar
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- MeinSqlConnection.Close()
- Return Wert
- End Function
- .....
- End Class
Falls ein anderer Datenbanktyp verwendet werden soll, muss die DLL, die den Zugriff auf die Datenbank steuert ausgetauscht werden.
Dazu muss dann überall im Code OleDB durch die entspechende Information ersetzt werden.
z.B. für den Zugriff auf MS SQL-Server bzw. MS SQL.ServerExpress OleDB durch SQL
VB.NET-Quellcode
- Imports System.Data.SQLClient
- Public Class frmTest
- .....
- Private Function SpeichernMitNeuemWert() As Int64
- Dim MeinSqlConnection As SQLConnection = New SQLConnection(My.Settings.DBConnectionString)
- 'Speichern
- Dim MeinSqlString As String = "INSERT INTO Tabelle(Feld1,Feld2, ....) VALUES (Wert1,Wert2,....)"
- Dim MeinSqlCommand As SQLCommand = New SQLCommand(MeinSqlString, MeinSqlConnection)
- MeinSqlConnection.Open()
- Try
- MeinSqlCommand.ExecuteNonQuery()
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- 'ID-Wert auslesen
- MeinSqlString = "Select @@Identity From tTest"
- MeinSqlCommand.CommandText = MeinSqlString
- Try
- Wert = MeinSqlCommand.ExecuteScalar
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- MeinSqlConnection.Close()
- Return Wert
- End Function
- .....
- End Class
NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „INOPIAE“ ()