Domanda

Sto cercando di eseguire una semplice query di selezione utilizzando IfxCommand. Vorrei impostare l'isolamento di lettura sporca, ma ho trovato solo esempi di impostazione livello di isolamento nel contesto di un IfxTransaction. Non ho bisogno di una transazione come io sono solo l'emissione di un istruzione select. Qui di seguito è il mio codice attuale, è questo l'approccio migliore? Inoltre, se si sa per quanto tempo il livello di isolamento rimane impostato su lettura sporca vorrei sapere.

DataSet ds = new DataSet();
        IfxConnection connection = new IfxConnection(ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString);
        IfxCommand command = new IfxCommand();

        try
        {
            connection.Open();                
            command.Connection = connection;
            command.CommandText = "SET ISOLATION TO DIRTY READ";
            command.ExecuteNonQuery();

            command.CommandText = BuildCommandString();

            IfxDataAdapter idap = new IfxDataAdapter(command.CommandText, connection);
            idap.Fill(ds);
        }
È stato utile?

Soluzione

Sarebbe

using (var noTransaction = new TransactionScope(TransactionScopeOption.Suppress)) {
  // Use your connection here
}

lavorare? Non sono sicuro se Informix si arruola nelle transazioni ambientali? Oppure - se si desidera impostare l'IsolationLevel esplicitamente in una transazione annidata:

var txOptions = new TransactionOptions();
txOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
txOptions.Timeout.TotalSeconds * 2));
using (var noTransaction = new TransactionScope(TransactionScopeOption.RequiresNew, txOptions)) {
  // Use your connection here
}

Modifica: Basta leggere il commento che riferisce a Informix e TransactionScopes. Dovreste modificare il codice in modo da riflettere la soluzione c'è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top