Concurrencia en WinForms

12/04/2005 - 20:20 por Gabriel Zato Cearra | Informe spam
Hola, tengo un problema que me está volviendo turuleta.

Existe una aplicación WinForms creada con VS.NET 2003,
framework 1.1, en Windows XP.

El ejecutable .EXE - y toda la instalación, dlls, etc-
está en una unidad de red, T:\ por ejemplo. Dicha
aplicación .NET(EXE) es "ejecutada" por varios usuarios de
la red, con Windows XP.

Bien, en determinadas ocasiones se producen errores
inesperados, por ej, cuando un usuario edita un registro y
otro usuario edita otro registro (no el mismo registro).

La aplicación tiene un form con un filtro y un datagrid
que se carga de datos. Al pulsar sobre fila de datagrid se
abre un form2 con una serie de tabs, y botones aceptar y
cancelar.

Bien, en el Load de form2 se inicia transacción
(begintransaction), y al aceptar-cancelar se haría commit
o rollback. En el Close de form2 también se controla para
hacer commit o rollback.

Qué puede estar pasando ?. Influye el hecho que el EXE
esté en una unidad de red y los usuarios ejecuten el mismo
EXE ?.
Según creo, que esté en unidad de red, no afectaría, pues
es cuestión permisos de seguridad.

Intuyo que es por transacciones, y se hace algo de eso de
una política "pesimista" en lugar de "optimista". Pero en
mi caso, cómo puedo hacerla optimista si no tengo un
Dataset, con el que hacer el UpdateChanges a traveŽs de un
DataAdapter ?????


Cómo puedo solucionar la problemática de la concurrencia
en estos casos:

- Un usuario pulsa sobre la fila 1 de la rejilla para
editar esa fila en otro Form; otro
usuario pulsa sobre la fila 1 de la rejilla para editar
esa fila en otro Form. Qué se puede
hacer ?

- Un usuario pulsa sobre la fila 1 de la rejilla para
editar esa fila en otro Form; otro
usuario pulsa sobre la fila 10 de la rejilla para editar
esa fila en otro Form; habría algún
problema de concurrencia y acceso a datos en este caso ?.

Nota: en ambos casos, no hay un DataSet (no hay nada
desconectado), la rejilla se carga y se refresca cada vez
que se modifican los datos de la fila X.

En fin, que estoy hecho un lío y no voy a acabar muy bien.
 

Leer las respuestas

#1 Miguel Angel Campos
12/04/2005 - 21:47 | Informe spam
Que base de datos estás utilizando?
Un Saludo,

Miguel Angel Campos
MCAD.NET

"Gabriel Zato Cearra" escribió en el
mensaje news:0b4e01c53f8c$41cccf80$
Hola, tengo un problema que me está volviendo turuleta.

Existe una aplicación WinForms creada con VS.NET 2003,
framework 1.1, en Windows XP.

El ejecutable .EXE - y toda la instalación, dlls, etc-
está en una unidad de red, T:\ por ejemplo. Dicha
aplicación .NET(EXE) es "ejecutada" por varios usuarios de
la red, con Windows XP.

Bien, en determinadas ocasiones se producen errores
inesperados, por ej, cuando un usuario edita un registro y
otro usuario edita otro registro (no el mismo registro).

La aplicación tiene un form con un filtro y un datagrid
que se carga de datos. Al pulsar sobre fila de datagrid se
abre un form2 con una serie de tabs, y botones aceptar y
cancelar.

Bien, en el Load de form2 se inicia transacción
(begintransaction), y al aceptar-cancelar se haría commit
o rollback. En el Close de form2 también se controla para
hacer commit o rollback.

Qué puede estar pasando ?. Influye el hecho que el EXE
esté en una unidad de red y los usuarios ejecuten el mismo
EXE ?.
Según creo, que esté en unidad de red, no afectaría, pues
es cuestión permisos de seguridad.

Intuyo que es por transacciones, y se hace algo de eso de
una política "pesimista" en lugar de "optimista". Pero en
mi caso, cómo puedo hacerla optimista si no tengo un
Dataset, con el que hacer el UpdateChanges a trave´s de un
DataAdapter ?????


Cómo puedo solucionar la problemática de la concurrencia
en estos casos:

- Un usuario pulsa sobre la fila 1 de la rejilla para
editar esa fila en otro Form; otro
usuario pulsa sobre la fila 1 de la rejilla para editar
esa fila en otro Form. Qué se puede
hacer ?

- Un usuario pulsa sobre la fila 1 de la rejilla para
editar esa fila en otro Form; otro
usuario pulsa sobre la fila 10 de la rejilla para editar
esa fila en otro Form; habría algún
problema de concurrencia y acceso a datos en este caso ?.

Nota: en ambos casos, no hay un DataSet (no hay nada
desconectado), la rejilla se carga y se refresca cada vez
que se modifican los datos de la fila X.

En fin, que estoy hecho un lío y no voy a acabar muy bien.

Preguntas similares