Come gestire le transazioni durante la creazione di una connessione al database per ogni query

2

In linea con questo post qui Ho intenzione di modificare il mio sito Web per creare una connessione per query per sfruttare il pool di connessioni di .NET. Con questo in mente, non so come dovrei occuparmi delle transazioni. Al momento faccio qualcosa come (codice psuedo):

GlobalTransaction = GlobalDBConnection.BeginTransaction();
try
{
    ExecSQL("insert into table ..")
    ExecSQL("update some_table ..")
    ....
    GlobalTransaction.Commit();
}catch{
    GlobalTransaction.Rollback();
    throw;
}

ExecSQL sarebbe come questo:

using (SqlCommand Command = GlobalDBConnection.CreateCommand())
{
    Command.Connection = GlobalDBConnection;
    Command.Transaction = GlobalTransaction;
    Command.CommandText = SQLStr;
    Command.ExecuteNonQuery();
}

Non sono abbastanza sicuro di come cambiare questo concetto per gestire le transazioni se la connessione viene creata all'interno di ExecSQL perché vorrei che la transazione fosse condivisa tra le routine di inserimento e di aggiornamento.

    
posta webnoob 29.03.2012 - 13:02
fonte

1 risposta

4

Dovresti utilizzare TransactionScope per le transazioni in .NET:

using(var tx = new TransactionScope())
{
    ExecSQL("insert into table ..")
    ExecSQL("update some_table ..")
    ....
    tx.Complete();
}

Il codice sopra assicurerà che entrambe le dichiarazioni appartengano a una transazione.

Puoi nidificare TransactionScope s se necessario.

    
risposta data 29.03.2012 - 13:06
fonte

Leggi altre domande sui tag