Implementé SqlTransaction
en C# para comenzar, confirmar y retrotraer la transacción. Todo va bien, pero tengo algún problema al acceder a esas tablas que están conectadas durante la transacción. No pude leer la tabla durante la transacción (la tabla que está en transacción). Mientras buscaba sobre esto, descubrí que sucede debido a un bloqueo exclusivo. Cualquier selección posterior en esos datos a su vez tiene que esperar a que se libere el bloqueo exclusivo. Luego, he revisado cada nivel de aislamiento proporcionado por SqlTransaction
, pero no funcionó. Por lo tanto, debo liberar el bloqueo exclusivo durante la transacción para que otros usuarios puedan tener acceso a esa tabla y puedan leer los datos. ¿Hay algún método para lograr esto? Gracias de antemano.Nivel de aislamiento en Sql Transacción
Aquí está mi código C# para la transacción
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();
} `
Este código está trabajando muy bien, pero el problema es que cuando accedo a los datos de las tablas (aquellos visitada durante la transacción) en el momento de la transacción. Se accede a las tablas por otras partes de la aplicación. Entonces, cuando traté de leer datos de la tabla, arroja una excepción.
¿Cuál es su intención aquí? No se lo tome el bloqueo al actualizar? o para que otros lectores ignoren los bloqueos (que están ahí por muy buenas razones) –
No deseo tener un bloqueo en la tabla transacted para otros usuarios ... la transacción puede ser de larga duración porque en el momento de la transacción, diez de miles de datos se insertan en la tabla, por lo que probablemente lleve mucho tiempo ... Por lo tanto, en el período de tran saction, quiero que otro usuario tenga acceso a esa tabla y pueda leer datos ....... –