Diseño de Aplicación - Acceso a Datos.

17/06/2004 - 09:29 por Anonimo | Informe spam
Hola, les cuento mi caso por si alguien pudiera
orientarme por el buen camino.

Quiero desarrollar una aplicación Windows que "ataca" una
base de datos. La aplicación se instalaría en una serie
de equipos de una red (no muy grande) y atacaría una
base de datos de un servidor de la misma red.

El caso que hay un formulario, con una serie de pestañas
(TabPages de TabControl):

1. Hay pestañas que tienen textbox, dropdownlist,
dateTimepicker, etc, es decir, una serie de controles
para que el usuario pueda meter datos.

2. Hay pestañas que sólo tienen un DataGrid en el que se
van metiendo datos de esta manera: hay un botón nuevo que
abre un nuevo formulario para introducir datos; si se
pulsa (DoubleClick) sobre una fila se abre ese formulario
para modificar (o eliminar) los datos.

3. No se ha contemplado aún, pero podría haber pestañas
que combinen controles (textbox, dropdownlist, etc) con
DataGrid.

Bien, el caso es que en ese formulario que contiene las
pestañas, aparecería un boton Guardar que tendría que
guardar todos los datos de todas las pestañas.

Estos datos afectan a varias tablas, y concluyo que
habría que utilizar transacciones.

Mi duda se concreta en cuál es la mejor forma de
realizarlo ?

Es decir, cuándo abro la transacción y cuándo cerrarla
(considerando también si hay errores y se cierra la
aplicación que pasaría si se deja la transacción
abierta) ?

Cómo puedo pasar una conexión abierta (con transacción
iniciada) a ese formulario que inserta/modifica datos de
los DataGrid ?

Es para este caso tener una Factoria de Conexiones que
siempre devuelva la misma conexión, es decir, que durante
toda la vida de la aplicación haya una única conexión ?.

En fin, estoy en un mar de dudas.

Gracias por vuestra atención, no sé si me han entendido
bien mis dudas.
 

Leer las respuestas

#1 Javier Ros
17/06/2004 - 14:08 | Informe spam
escribió en el mensaje


news:1d96001c4543c$d6dac910$
Hola, les cuento mi caso por si alguien pudiera
orientarme por el buen camino.



Claro, te voy contestando poco a poco abajo.


Quiero desarrollar una aplicación Windows que "ataca" una
base de datos. La aplicación se instalaría en una serie
de equipos de una red (no muy grande) y atacaría una
base de datos de un servidor de la misma red.

El caso que hay un formulario, con una serie de pestañas
(TabPages de TabControl):

1. Hay pestañas que tienen textbox, dropdownlist,
dateTimepicker, etc, es decir, una serie de controles
para que el usuario pueda meter datos.

2. Hay pestañas que sólo tienen un DataGrid en el que se
van metiendo datos de esta manera: hay un botón nuevo que
abre un nuevo formulario para introducir datos; si se
pulsa (DoubleClick) sobre una fila se abre ese formulario
para modificar (o eliminar) los datos.

3. No se ha contemplado aún, pero podría haber pestañas
que combinen controles (textbox, dropdownlist, etc) con
DataGrid.

Bien, el caso es que en ese formulario que contiene las
pestañas, aparecería un boton Guardar que tendría que
guardar todos los datos de todas las pestañas.

Estos datos afectan a varias tablas, y concluyo que
habría que utilizar transacciones.

Mi duda se concreta en cuál es la mejor forma de
realizarlo ?



StartTransaction
Intentar UpdateTables
SiError RollBack
SiNoError Commit


Es decir, cuándo abro la transacción y cuándo cerrarla
(considerando también si hay errores y se cierra la
aplicación que pasaría si se deja la transacción
abierta) ?



Eso no debe pasarte, pero si la aplicacion acabase estando la transacción
abierta,
la base de datos efectuaría un RollBack sobre la transacción.
La transacción debes abrirla justo antes de actualizar los datos y cerrarla
justo despues,
te aconsejo que no esperes respuesta del usuario para cerrar la transacción.
Evita que la
transacción esté abierta mientras el usuario tenga que dar respuesta a algun
mensaje, hay
usuarios que dejan el ordenador solo durante horas, ten en cuenta que los
registros actualizados
bajo transacción quedan bloqueados.


Cómo puedo pasar una conexión abierta (con transacción
iniciada) a ese formulario que inserta/modifica datos de
los DataGrid ?



puedes pedir un objeto de conexión a un servicio web o a un metodo de tu
propia libreria,
pero no te aconsejo que la pases con la transacción iniciada. Recuerda la
transacción debe
estar activa mientras actualices los datos no más.


Es para este caso tener una Factoria de Conexiones que
siempre devuelva la misma conexión, es decir, que durante
toda la vida de la aplicación haya una única conexión ?.



Como te digo, puedes montarte tu pool de conexiones, yo en concreto lo he
hecho
usando servicios web.


En fin, estoy en un mar de dudas.

Gracias por vuestra atención, no sé si me han entendido
bien mis dudas.




Espero que te sea de ayuda.

Javier Ros Moreno
Aguas de Murcia

Preguntas similares