Ho implementato SqlTransaction
in C# per iniziare, eseguire il commit e eseguire il rollback della transazione. Tutto sta andando bene, ma ho qualche problema durante l'accesso a quelle tabelle che sono in connessione durante la transazione. Non sono riuscito a leggere la tabella durante la transazione (quelle tabelle che sono in transazione). Durante la ricerca di questo, ho scoperto che succede a causa di un blocco esclusivo. Ogni successiva selezione su quei dati a sua volta deve attendere il rilascio del blocco esclusivo. Quindi, ho superato tutti i livelli di isolamento forniti da SqlTransaction
, ma non ha funzionato. Quindi, devo rilasciare il blocco esclusivo durante la transazione in modo che l'altro utente possa avere accesso a quella tabella e possa leggere i dati. Esiste un metodo per raggiungere questo obiettivo? Grazie in anticipo.Livello di isolamento in Sql Transazione
Ecco il mio codice C# per la transazione
try
{
SqlTransaction transaction = null;
using (SqlConnection connection=new SqlConnection(Connection.ConnectionString))
{
connection.Open();
transaction=connection.BeginTransaction(IsolationLevel.Snapshot,"FaresheetTransaction");
//Here all transaction occurs
if (transaction.Connection != null)
{
transaction.Commit();
transaction.Dispose();
}
}
}
catch (Exception ex)
{
if (transaction.Connection != null)
transaction.Rollback();
transaction.Dispose();
} `
Questo codice sta lavorando bene, ma il problema è che quando accedo i dati di tabelle (quelli accessibili durante la transazione) durante il periodo di transazione. Le tabelle sono accessibili da altre parti dell'applicazione. Quindi, quando ho provato a leggere i dati dal tavolo, genera un'eccezione.
Qual è la vostra intenzione qui? No, non prendere il blocco durante l'aggiornamento? o per altri lettori ignorare le serrature? (che ci sono per ottime ragioni) –
Non voglio avere il blocco nella tabella transata per altri utenti .... la transazione può durare a lungo perché al momento della transazione, dieci di migliaia di inserimenti di dati nella tabella, quindi probabilmente ci vorrà molto tempo ... Quindi, al momento del tran saction, voglio che l'altro utente abbia accesso a quel tavolo e possa leggere i dati ....... –