Wie SELECT @@IDENTITY abfragen?

23/07/2009 - 16:23 von Steffen Meyer | Report spam
Hallo zusammen,

ich hab zur Zeit wohl ein ziemliches Brett vor dem Kopf. Ich hab mit
folgenden Zeilen zwei DataTabels wieder zurück in die SQL-Datenbank
geschrieben:

Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdSave.Click

Dim cbArtikel As New SqlCommandBuilder(daArtikel)
Dim cbArtikelDetails As New SqlCommandBuilder(daArtikelDetails)

Try
Me.dtgMain.EndEdit() 'Dateneingabe beenden, um auch die letzte Änderung, die
event nicht mit Enter abgeschlossen wurde zu übernehmen
AddHandler daArtikel.RowUpdated, AddressOf TableArtikel_RowUpdated

daArtikel.Update(dtArtikel) 'unter Zuhilfenahme des SQLCommandBuilder die
neuen/geànderten Datensàtze zurück in DB schreiben

'Hier muss die ermittelte ID in die zweite DataTable eingefügt werden

Me.dtgDetails.EndEdit() 'Dateneingabe beenden, um auch die letzte Änderung,
die event nicht mit Enter abgeschlossen wurde zu übernehmen
daArtikelDetails.Update(dtArtikelDetails) 'unter Zuhilfenahme des
SQLCommandBuilder die neuen/geànderten Datensàtze zurück in DB schreiben
Me.cmdSave.Enabled = False 'Button Speichern ausgrauen

Catch ex As Exception
MessageBox.Show(ex.Message, "SQL-Fehler", MessageBoxButtons.OK,
MessageBoxIcon.Error)
End Try

End Sub


Ich müßte nun im folgenden Code die letzte vergebene ID vom SQL-Server
erfragen, leider komme ich damit nicht weiter:

Private Sub TableArtikel_RowUpdated(ByVal sender As Object, ByVal e As
SqlRowUpdatedEventArgs)

If e.Status = UpdateStatus.Continue AndAlso e.StatementType =
StatementType.Insert Then

Dim cmd As New SqlCommand
cmd.CommandText = "SELECT @@Identity" : cmd.Connection = MyConnection
e.Row("ID") = cmd.ExecuteScalar()

End If

End Sub


Leider bekomme ich mit diesem Code dann nur eine Fehlermeldung in der
MessageBox meiner Catch-Anweisung, dass ExecuteScalar eine geöffnete
Verbindung erfordert, diese aber geschlossen sei.

Ich würde mich freuen, wenn mir jemand sagen könnte, welchen Fehler ich
mache.

Gruß
Steffen
 

Lesen sie die antworten

#1 Peter Fleischer
23/07/2009 - 18:52 | Warnen spam
"Steffen Meyer" schrieb im Newsbeitrag
news:

Ich müßte nun im folgenden Code die letzte vergebene ID vom SQL-Server
erfragen, leider komme ich damit nicht weiter:

Private Sub TableArtikel_RowUpdated(ByVal sender As Object, ByVal e As
SqlRowUpdatedEventArgs)

If e.Status = UpdateStatus.Continue AndAlso e.StatementType =
StatementType.Insert Then

Dim cmd As New SqlCommand
cmd.CommandText = "SELECT @@Identity" : cmd.Connection = MyConnection
e.Row("ID") = cmd.ExecuteScalar()

End If

End Sub

Leider bekomme ich mit diesem Code dann nur eine Fehlermeldung in der
MessageBox meiner Catch-Anweisung, dass ExecuteScalar eine geöffnete
Verbindung erfordert, diese aber geschlossen sei.



Hi Steffen,
in den Argumenten bekommst du das betreffende Connection-Objekt, welches du
nutzen kannst, z.B. so:

Dim cmd As New SqlCommand
cmd.CommandText = "SELECT @@Scope_Identity"
cmd.Connection = e.Command.Connection
e.Row("ID") = CType(cmd.ExecuteScalar(), Integer)

Viele Grüsse
Peter

Ähnliche fragen