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