J'ai une instruction INSERT à plusieurs lignes (environ 300 ensembles de valeurs) que je voudrais valider dans la base de données MySQL d'une manière tout ou rien.Annulation d'une transaction avec MySQL Connector dans VB.net
insert into table VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9);
Dans certains cas, un ensemble de valeurs dans la commande ne répond pas aux critères de la table (clé dupliquée, par exemple). Quand cela arrive, je ne veux pas que les ensembles précédents soient ajoutés à la base de données. J'ai implémenté ceci avec le code suivant, cependant, ma commande rollback ne semble pas faire de différence. Je l'ai utilisé cette documentation: http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqltransaction.html
Dim transaction As MySqlTransaction = sqlConnection.BeginTransaction()
sqlCommand = New MySqlCommand(insertStr, sqlConnection, transaction)
Try
sqlCommand.ExecuteNonQuery()
Catch ex As Exception
writeToLog("EXCEPTION: " & ex.Message & vbNewLine)
writeToLog("Could not execute " & sqlCmd & vbNewLine)
Try
transaction.Rollback()
writeToLog("All statements were rolled back." & vbNewLine)
Return False
Catch rollbackEx As Exception
writeToLog("EXCEPTION: " & rollbackEx.Message & vbNewLine)
writeToLog("All statements were not rolled back." & vbNewLine)
Return False
End Try
End Try
transaction.commit()
je reçois l'exception DUPLICATE KEY lancée, aucune exception Rollback jeté, et chaque ensemble de valeurs à clé en double enregistrées dans la base. Qu'est-ce que je fais mal?
Ouais, c'était tout. C'est toujours les petites choses. Appréciez la brillance. – Jonathan