Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/11/2011, 07:39
chascos69
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 10 meses
Puntos: 0
Transacciones restricciones tablas y registros

Hola

Este hilo es una mezcla de NET y sql pero tira más para sql... ahí va:

Llevo horas leyendo y probando y aun no he sido capaz de resolver mi problema... Lo expongo a ver:

Estoy unsando transacciones para inserts, update y delete con NET de esta manera (la estandar):

SqlConnection con = new SqlConnection("Connection String");
SqlTransaction tr = con.BeginTransaction();
SqlCommand cmd = new SqlCommand("Update Account set Balance=500 where AccountId=52", con, tr);
try
{
cmd.ExecuteNonQuery();
tr.Commit();
}
catch (Exception exc)
{
tr.Rollback();
}
finally
{
con.Close();
}

EL problema es que MIENTRAS se ejecuta la transaccion me deja TODA la tabla bloqueada...esto no tiene ningún sentido. Lo que pretendo conseguir es:

- Cuando es insert : POder hacer otros inserts (por que no?), updates y deletes PERO q no se vean los registros insertados al hacer SELECT hasta que no hago el commit de la transacción

- Cuando es UPDATE: Poder hacer inserts , updates MENOS el que estoy trabajando y deletes PERO q no se vean lo cambios de mi UPDATE hasta que no hago el commit de la transacción

- Cuando hago delete: Poder hacer inserts, updates y deletes MENOS del que estoy borrando PERO q se vea el registro que voy ha borrar (pq. aun no he hecho el commit)



Para esto me he leído esto:

http://msdn.microsoft.com/es-es/library/ms173763.aspx

http://technet.microsoft.com/es-es/l.../ms187373.aspx



En teoría para el Insert (aun estoy en el primero ya véis) he probado:

connection.BeginTransaction(System.Data.IsolationL evel.Serializable, "SampleTransaction")

y luego al recuperar Select * from [Aules] WITH (nolock) pero esto me muestar los que aun no están en commit



A ver si alguien me dice que combinaciones de IsolationLevel y de restricción (es decir with) se ha de usar en cada caso

Gracias