OVH Cloud OVH Cloud

Pb Procédure stockée et ADO

1 réponse
Avatar
TAGG INFO NEWS
Salut,

je suis sous SQL Server 2000, VC++ et AD0 2.7

j'ai une procédure stockée qui réalise des opérations dans une transaction.
L'exécution de cette transaction peut parfois être longue et est parfois
interrompue par une expiration du délai par ADO. J'ai remarqué que
contrairement à ce qu'il se passe losqu'il y a une erreur SQL, la
transaction n'est pas annulée et à prioiri reste active. Donc toutes les
actions qui suivent dans le cadre de la même connexion ADO sont, à tors,
intégrées à la transaction en cours.

Cela me pose un problème. Est ce que quelqu'un a déjà remarqué se
comportement? Y a t'il un moyen pour qu'une expiration du délais ADO annule
toute transaction SQL active liée à cette connexion ?

Merci

Thierry

1 réponse

Avatar
Med Bouchenafa [MVP]
C'est le comportement normal de SQL/Server
Contrairement à ce que l'on aurait pu penser logiquement, une erreur dans une transaction n'annule
jamais la transaction sauf si l'option XACT_ABORT est activée. J'ai remarqué dernièrement , à mes
dépens d'ailleurs, que dans le cas d'une erreur fatale, même cette option n'y pouvait rien.
Je n'ai pas testé avec une erreur timeout qui n'est pas une erreur SQL/Server mais une erreur coté
client.
C'est le client qui décide d'annuler. C'est donc ce client qui devrait prendre la précaution de
tester s'il y a une transaction en cours et l'annuler
IF @@TRANCOUNT
ROLLBACK TRAN

La gestion des erreurs est vraiment le maillon faible de T-SQL
Il y a un article intéressant ici : http://www.algonet.se/~sommar/error-handling-I.html
C'est vraiment le meilleur article sur la gestion des erreurs T-SQL
Si quelqu'un avait le temps de le traduire, on pourrait le mettre sur le site frenchSQL
je suis certain qu'il rendra service à beaucoup

--
Salutations
Med Bouchenafa
TETRASET
75015 Paris

"TAGG INFO NEWS" a écrit dans le message de news:
bjq89s$v5f$
Salut,

je suis sous SQL Server 2000, VC++ et AD0 2.7

j'ai une procédure stockée qui réalise des opérations dans une transaction.
L'exécution de cette transaction peut parfois être longue et est parfois
interrompue par une expiration du délai par ADO. J'ai remarqué que
contrairement à ce qu'il se passe losqu'il y a une erreur SQL, la
transaction n'est pas annulée et à prioiri reste active. Donc toutes les
actions qui suivent dans le cadre de la même connexion ADO sont, à tors,
intégrées à la transaction en cours.

Cela me pose un problème. Est ce que quelqu'un a déjà remarqué se
comportement? Y a t'il un moyen pour qu'une expiration du délais ADO annule
toute transaction SQL active liée à cette connexion ?

Merci

Thierry