2009-09-09 4 views
1

J'ai un simple code qui utilise BeginTransaction(). La transaction résultante est affectée à la connexion que j'utilise pour certaines commandes sql.BeginTransaction ne pas appeler BEGIN TRANSACTION

Lorsque je profile le sql résultant, je ne vois pas de BEGIN TRANSACTION à aucun moment. Qu'est-ce qui pourrait empêcher la transaction d'être utilisée?

+0

Avez-vous réellement testé pour voir si la transaction fonctionne même si elle n'apparaît pas dans profiler (comme Philippe ne le suggère pas) – Jayden

Répondre

1

Les transactions sont traitées à un niveau inférieur lors de l'utilisation d'ADO.NET. Il n'y a pas d'instructions "BEGIN TRANSACTION" envoyées au serveur.

+0

Ok, alors comment ça marche? Si je ne vois pas les commandes de transaction BEGIN/COMMIT/ROLLBACK, que dois-je voir? – ilivewithian

0

Vous devez vous assurer que vous définissez non seulement la transaction sur l'objet de connexion, mais que vous devez également affecter la transaction à sqlCommand.

Voir l'article this codeproject pour un exemple.

+0

C'est ce que je fais déjà, c'est pourquoi je suis un peu confus. – ilivewithian

0

Réitérer la déclaration de Philippe:

Les transactions sont traitées à un niveau inférieur lors de l'utilisation ADO.NET. Il n'y a pas d'instructions "BEGIN TRANSACTION" envoyées au serveur.

À un certain point, SQL doit être converti en appels réels. La plupart des ADO.NET (tous ceux avec lesquels j'ai travaillé) envoient souvent une commande spécifique aux bases de données BEGIN, COMMIT et ROLLBACK car l'envoi d'ASCII (ou autre) serait moins efficace que ce que le serveur devra analyser. C'est pourquoi l'envoi de requêtes paramétrées est souvent plus rapide que les requêtes SQL simples, car la bibliothèque peut envoyer des commandes spécifiques, ce qui réduit l'analyse et probablement la validation des données (?).

HTH!

Questions connexes