Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Domanda transazioni...

  1. #1

    Domanda transazioni...

    Salve raga , una domanda :

    se io ho una transazione che fà questo :

    BEGIN Tran

    comando 1
    comando 2
    comando 3
    comando 4 ----> ERRORE


    Se a stò punto ho un errore , nel costrutto try/catch in c# devo fare il rollback della
    transazione ???

    Oppure fà il rollback in automatico ???

    Attualmente nel catch faccio fare il rollback della transazione , però mi dà errore perchè
    mi dice che non ho alcuna transazione attiva...

    :master:

  2. #2
    sei sicuro di non aver fatto una committ da qualche parte?

  3. #3
    Sicurissimo...

    Io faccio :

    objConn.Open();
    codice:
    					SqlTransaction myTrans = objConn.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted,"FastMTS");
    
    					objCmd1.Connection = objConn;
    					objCmd1.Transaction = myTrans;
    Dove poi passo il mio command e la mia connection ad una metodo...
    Il metodo fà inserimenti in diverse tabelle ma non committa nè rollbakka niente...

    Se il metodo a termine esecuzione và a buon fine committo la transazione...

    Viceversa faccio il rollback in questo modo :

    codice:
    objCmd1.Transaction.Rollback("FastMTS");
    Eppure quando cerco di fare quel rollback , ho un errore che mi dice che non è attiva alcuna transazione...

  4. #4
    Se invece faccio il rollback senza specificare il nome della transazione (FastMTS) , tutto funziona... :master:

    codice:
    objCmd1.Transaction.Rollback();
    Qualcuno me lo sà spiegare ?

  5. #5
    Potresti invece spiegare perche' vorresti mettere il nome alla transazione?
    e anche perche' utilizzi il livello di isolamento ReadUncommitted che e' il meno sicuro e non lasci invece quello di default?

    Il "nome" alla transazione per quanto ne so io serve per poter recuperare e fare operazioni piu' specifiche in caso di crash del sistema utilizzando il transaction log del database server.

    Per verificare meglio eventuali errori e' comunque necessario vedere il tuo codice magari la parte relativa alla creazione della connection e transazione, il try catch, la chiamata ad altra funzione, la funzione.

    Copio e incollo dalla guida in linea di visualstudio il primo pezzo di codice di esempio di una transazione:

    codice:
    using (SqlConnection connection = new SqlConnection(connectString))
    {
        connection.Open();
    
        // Start a local transaction.
        SqlTransaction sqlTran = connection.BeginTransaction();
    
        // Enlist the command in the current transaction.
        SqlCommand command = connection.CreateCommand();
        command.Transaction = sqlTran;
    
        try
        {
            command.CommandText =
              "INSERT INTO Production.ScrapReason(Name) VALUES('Wrong size')";
            command.ExecuteNonQuery();
            command.CommandText =
              "INSERT INTO Production.ScrapReason(Name) VALUES('Wrong color')";
            command.ExecuteNonQuery();
            sqlTran.Commit();
            Console.WriteLine("Both records were written to database.");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.WriteLine("Neither record was written to database.");
            sqlTran.Rollback();
        }
    }
    Saluti a tutti
    Riccardo

  6. #6
    Potresti invece spiegare perche' vorresti mettere il nome alla transazione?

    Mi sembrava + professionale...
    Creo la transazione FASTMTS , e rollbakko la transazione FASTMTS , niente di +...
    Però vedo che non si può fare...


    e anche perche' utilizzi il livello di isolamento ReadUncommitted che e' il meno sicuro e non lasci invece quello di default?

    Perchè ho dei vincoli tra 2 tabelle : i dati di dettaglio son vincolati all'esistenza di una riga di testata in un altra tabella... Ho bisogno di leggere i dati non committati perchè altrimenti quando inserisco il dettaglio mi genere l'eccezione perchè manca la corrispondenza

    Il "nome" alla transazione per quanto ne so io serve per poter recuperare e fare operazioni piu' specifiche in caso di crash del sistema utilizzando il transaction log del database server.

    Pensavo si potesse rollbakkare per nome della transazione...


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.