Hola, ciertamente para el problema de la concurrencia tienes varios escenario basicos:
1. Los usuarios hacen consultan la base de datos, en este caso no exusten problemas de concurrencia, ya que nadie esta modificando la base.
2. Los usuarios hacen consultas y solo uno actualiza algun(os) registros de la base, en este caso el resto de usuarios no siempre pueden ver los cambios MAGICAMENTE, en la version anterior de ADO exite un tipo de recordset denominado dinamico, este si te permite verlos cambios de realizados en la base puesto que este se mantiene en contacto con la base (es un esquema de data conectada), y tambien maneja un mecanismo de bloqueo de los registros en edicion (Optimista y Pesimista) de tal manera que no ocurran problemas porque dos usuarios estan modificando el mismo registro.
Sin embargo sabemos muy muy bien que actualmente se trabaja muchisimo mas con aplicaciones DESCONECTADAS, es decir que no estan en permanente conversacion con la base de datos y no mantienen una conexion abierta. Estas aplicacion son mejores ya que optimizan el uso de recursos de servidor. Ahora bien en este tipo de aplicaciones si conllevan el problema de la concurrencia. Sabemos muy bien que ADO.Net esta pensado para trabajar con data desconectada. Aqui se manejan varias formas de controlar la concurrencia:
a. Agregar un campo de tipo timestamp a la tabla que va a soportar la concurrencia (factura, Cliente, etc.) por cada consulta que extraiga datos de la base se debe obtener el ultimo valor del timestamp y se envia al cliente, es decir el cliente tendra el timestamp 23 (por ejemplo), si otro cliente desea obtener info de la misma tabla pues tambien obtendra el timestamp 23. Ahora si alguno de ellos realiza una modificacion y la envia a la base de datos (mediante un procedure), el procedure de actualizacion debe hacer una verificacion del timestamp enviado (23) y el actual del registro (23) y una vez hecha la actualizacion tendra que modificar el valor del timestamp (que pasara a ser 67, por ejemplo) de esa manera si alguien mas desea actualizar el mismo registro (el segundo usuario, por ejemplo, que tambien obtuvo el timestamp 23) la comparacion del timestamp enviado (23) sera contra el nuevo valor (67) con lo cual se devolvera un error al cliente indicandole que alguien ha modificado el registro mientras el estaba mofdificandolo, en tal caso se le podria devolver al usuario los nuevos datos del registro.
Existen varios metodos para controlar estos casos (ADO.Net maneja tambien su propio metodo), te he descrito solo uno de ellos, pero debes tener en cuenta que este problema se da principalmente cuando se trata de data desconectada.
Puedes revisar los siguientes articulos:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/architec/8_ar_sa2_5nqd.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconOptimisticConcurrency.asp
Saludos. |