Ho creato una connessione sql, CN1. Quindi questo CN1 viene aperto. Più avanti nel codice c'è un transactioncope. Se eseguo un comando sql su questa connessione CN1, è presente nella transazione?È importante aprire una connessione sql nel transactioncope
Codice simile a questo;
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?
...
}
Esiste una soluzione per risolvere questo problema all'interno di transactioncope diverso dalla connessione sql aperta nell'opzione transaction? I metodi di Enlist possono essere utili a riguardo? – mkus
mkus, sì è possibile utilizzare il metodo di istanza 'SqlConnection'' EnlistTransaction (Transaction.Current); 'per inserire una connessione già aperta in un ambito di transazione. Quindi dire che * DEVE * essere aperto all'interno di TransactionScope non è vero, anche se è così che si suppone che il meccanismo automatizzato venga usato. Inoltre, l'apertura della connessione all'interno dell'ambito non garantisce nemmeno che la connessione venga inserita, poiché la stringa di connessione potrebbe specificare "Enlist = false". In genere, questa opzione non è specificata, ma è qualcosa di cui essere a conoscenza e da verificare. Vedi http://stackoverflow.com/a/2886326/88409 – Triynko