J'ai créé une connexion sql, CN1. Alors ce CN1 est ouvert. Plus tard dans le code, il y a un transactioncope. Si j'exécute une commande sql sur cette connexion CN1, est-ce dans la transaction?Est-il important d'ouvrir une connexion sql dans l'interface de transaction
Le code ressemble à ceci;
SqlConnection cn1 = new SqlConnection();
cn1.Open(); //connection opened when there is no ambient transaction.
...
using(TransactionScope scope = new TransactionScope())
{
SqlCommand cmd; //a typical sql command.
...
cmd.ExecuteNonQuery(); //Is this command within transaction?
...
}
Y at-il une solution pour résoudre ce problème dans le cadre d'une transaction autre que la connexion sql ouverte dans l'option de transaction? Les méthodes de Enlist peuvent-elles être utiles à ce sujet? – mkus
mkus, oui vous pouvez utiliser la méthode d'instance 'SqlConnection'' EnlistTransaction (Transaction.Current); 'pour inscrire une connexion déjà ouverte dans une portée de transaction. Donc dire que * DOIT * être ouvert dans TransactionScope n'est pas vrai, bien que c'est ainsi que le mécanisme automatisé est censé être utilisé. En outre, l'ouverture de la connexion à l'intérieur de la portée ne garantit même pas que la connexion sera enrôlée, car la chaîne de connexion pourrait spécifier "Enlist = false". Généralement, cette option n'est pas spécifiée, mais c'est quelque chose à connaître et à vérifier. Voir http://stackoverflow.com/a/2886326/88409 – Triynko