[VB2005] Forzare la scrittura di un ID auto_increment (MySQL)

martedì 31 luglio 2007 - 12.36

GuardianOfTheFlame Profilo | Junior Member

Ho trovato un altro modo (+ elegante) per aver gli Id corretti, ovvero usare un handler al metodo OnRowUpdate che legge l'ID appena inserito aggiornando il valore sul dataset:
Private Sub OnRowUpdated(ByVal sender As Object, ByVal args As MySqlRowUpdatedEventArgs)
Dim newID As Integer = 0
Try
Dim idCMD As MySqlCommand = New MySqlCommand("SELECT LAST_INSERT_ID()", Me.Connection)
If args.StatementType = StatementType.Insert Then
' Retrieve the identity value and store it in the CategoryID column.
newID = CInt(idCMD.ExecuteScalar())
args.Row("ID") = newID
End If
Catch ex As Exception
Throw ex
End Try
End Sub

ho però un problema in questa situazione:
ho 10 record nel db e creo 2 nuovi record di ID 11 e 12. Salvo sul db, ma nel frattempo ne è stato aggiunto 1, quindi il db assegna 12 e 13.
quando inserisce il primo gli riassegna l'ID 12 che però è già usato dal secondo record (che non è stato ancora inserito) e mi viene lanciato un errore di chiave duplicata! Ovviamente dovrebbe inserire i record partendo da quello di ID + alto per ovviare a questo problema, ma come faccio a dire al datadapter che deve iniziare l'inserimento dall'ID maggiore!?!


---MESSAGGIO ORIGINALE---

Ciao a tutti,
ho una tabella MySQL con la classica colonna ID int(11) auto_increment primary key che leggo in una datatable
Per essere certo di avere l'ID corretto quando aggiungo una riga eseguo i seguenti istruzioni SQL:
insert into tabella (ID) values (0) <-- MySQL capisce che deve crearsi l'id da solo visto che è auto_increment
select last_insert_id()
delete from tabella where ID = ...
in questo modo "prenoto" un id che sono sicuro sarà univoco.
Il mio problema è ora capire come fare a dire al DataAdapter di forzare la scrittura dell'ID sul DB, perché un semplice Update non scrive l'ID che ho calcolato, ma ne fa ricalcolare uno nuovo al DB.
Spero sappiate darmi una mano, che dopo averlo capito sono a a buon punto!

Grazie!
Salo

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5