PDA

View Full Version : [VB.NET + ACCESS] Conoscere ID dopo un INSERT


Lu Pier
01-08-2011, 11:26
Salve,
sto scrivendo un programmino in BASIC e utilizzo come database ACCESS.
Dopo aver lanciato un query tipo la seguente:

sql = "INSERT INTO tabella" _
& "(campo) " _
& "VALUES " _
& "(@campo)"


Vorrei sapere l'ID creato senza lanciare un altra query.

è possibile?

jackk87
01-08-2011, 23:18
Salve,
sto scrivendo un programmino in BASIC e utilizzo come database ACCESS.
Dopo aver lanciato un query tipo la seguente:

sql = "INSERT INTO tabella" _
& "(campo) " _
& "VALUES " _
& "(@campo)"


Vorrei sapere l'ID creato senza lanciare un altra query.

è possibile?

Ciao che io so non esiste niente per ricavarlo devi fare un'altra query tipo io lo faccio con MAX(id) e in sql con le transazioni in modo che se l'insert non va a buon fine la seconda query non la esegue e non avrai un id sbagliato ma questo puoi risolverlo catturando gli errori..

Lu Pier
02-08-2011, 07:48
Ciao che io so non esiste niente per ricavarlo devi fare un'altra query tipo io lo faccio con MAX(id) e in sql con le transazioni in modo che se l'insert non va a buon fine la seconda query non la esegue e non avrai un id sbagliato ma questo puoi risolverlo catturando gli errori..

Mi hanno consigliato di fare cosi

Dim sql As String = "INSERT INTO sn " _
& "(codice) " _
& "VALUES " _
& "(@codice)"

cn.Open()

Using MySqlCommand As New OleDbCommand(sql, cn)
MySqlCommand.Parameters.AddWithValue("@codice", codice)
MySqlCommand.ExecuteNonQuery()
End Using

sql = "SELECT MAX(id) FROM sn"
Dim newID As Integer = 0
Using MySqlCommand As New OleDbCommand(sql, cn)
newID = CType(MySqlCommand.ExecuteScalar(), Integer)
End Using



Ed effettivamente funziona, ma stavo valutando di passare da access a sql server per alte funzionalità.

jackk87
02-08-2011, 20:06
Mi hanno consigliato di fare cosi

Dim sql As String = "INSERT INTO sn " _
& "(codice) " _
& "VALUES " _
& "(@codice)"

cn.Open()

Using MySqlCommand As New OleDbCommand(sql, cn)
MySqlCommand.Parameters.AddWithValue("@codice", codice)
MySqlCommand.ExecuteNonQuery()
End Using

sql = "SELECT MAX(id) FROM sn"
Dim newID As Integer = 0
Using MySqlCommand As New OleDbCommand(sql, cn)
newID = CType(MySqlCommand.ExecuteScalar(), Integer)
End Using



Ed effettivamente funziona, ma stavo valutando di passare da access a sql server per alte funzionalità.

Ciao è la stessa cosa che ti ho detto io solo come ti hanno detto usi i paramiters e va bene per i vincoli ecc...però se per esempio l'insert non va a buon fine per qualsiasi motivo tu avrai l'id non dell'ultimo inserito ma di quello prima quindi se passi ad sql utilizza le transazioni così se l'insert non va a buon fine o il select tutto ritorna come prima come se non fosse successo niente ;)

wingman87
02-08-2011, 20:55
Puoi usare @@identity
http://support.microsoft.com/kb/815629