Así que estoy tratando de descubrir las mejores prácticas en la conexión de mi base de datos. Tengo una gran GUI .NET que sirve como interfaz para MySQL db. Actualmente abro una conexión en la carga de la aplicación y la uso para las interacciones que necesito. Sin embargo, toda la GUI tiene un único subproceso.Multithreading y conexión (es) a base de datos
Cuando empiezo a agregar BackgroundWorkers para consultas grandes y se ejecuta, me preocupa mi conexión abierta. Sé, por ejemplo, que solo puedo tener un dataReader a la vez abierto en esa conexión. Con múltiples hilos, el usuario podría intentar crear más que eso.
¿Cuáles son las ventajas/desventajas de mantener una conexión abierta para la aplicación frente a abrir una nueva conexión para cada interacción?
¿Cuáles son algunos patrones de diseño comunes para esto?
de Acción de Gracias
Jonathan
Cuando dice que el soporte de transacciones no es posible para el escenario ConnectAndDisconnect, ¿está hablando de una transacción "global" que respaldaría la reversión de todo desde que se lanzó la aplicación? De lo contrario, incluso con ConnectAndDisconnect, puede recibir soporte de transacciones. Debe organizar su código para identificar transacciones de "alto nivel" y luego usar, por ejemplo, "TransactionScope" en C# (http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx) – FrenchData
@FrenchData Me incluyo hablando de transacciones de nivel medio, procedentes de la capa de lógica de negocios. Hemos probado el enfoque de TransactionScope pero no fue suficiente, rápidamente nos encontramos con problemas, porque el código de la capa intermedia se usó de diferentes maneras imprevisibles. La solución era de alguna manera un híbrido entre los dos enfoques, nuestra clase ConnectionManager soportaba ambos enfoques. Por supuesto, no hubo necesidad de transacciones desde el inicio de la aplicación, es por eso que la solución híbrida fue mejor. – AureliusMarcus