Bonjour,
Une procédure stockée appelée depuis une appli VB.Net effectue le traitement suivant :
BEGIN TRANSACTION
-- Suppression d'une contrainte dans une table
ALTER TABLE Tab_Test DROP CONSTRAINT Tab_Test_contraint
-- Execution d'une procédure stockée pouvant provoquer un TimeOut
EXEC USP_TimeOut
IF @@Error IF @@ERROR <> 0
BEGIN
GOTO ROLLBACK_TRANSACTION
END
-- Rétablissement de la contrainte
ALTER TABLE Tab_Test ADD CONSTRAINT Tab_Test_Contraint check substring(colonne,1,2) in ('10','11','12'))
-- Fin de la transaction
COMMIT_TRANSACTION:
COMMIT TRANSACTION
GOTO END_TRANSACTION
ROLLBACK_TRANSACTION:
ROLLBACK TRANSACTION
GOTO END_TRANSACTION
END_TRANSACTION:
L'exécution de cette procédure depuis l'application provoque bien une SQLException TimeOut (Err -2 SQLServer).
Par contre, il semblerait que la transaction ne soit pas annulée suite au timeOut. Si je réexécute la procédure sur la même connexion dans une boucle, j'obtiens une erreur 3728 - la contrainte n'existe pas (Puisqu'il n'y a pas eu de rollback) sur plusieurs itération, puis je reviens sur une erreur de TimeOut...
Pour l'éviter, je dois dans mon applic VB.Net en cas d'erreur -2, demander l'exécution d'un Rollback transaction .
Ma question : dans ce genre d'erreur (le TimeOut), qui est sensé effectuer le Rollback de la transaction ? A quel moment est ce que SQlServer annule la transaction si l'application VB ne la fait pas ?
Merci pour vos éclaircissements
Fred
nouveau sur SqlServer