Clase para conexión a base de datos C#

Iniciado por RevolucionVegana, 9 Abril 2017, 17:07 PM

0 Miembros y 1 Visitante están viendo este tema.

RevolucionVegana

Hola a todos he creado una clase para hacer la conexión a la base de datos y poder reutilizarla cuantas veces quiera, pues bien, me gustaría saber si hace falta que esa clase retorne algo o como va la cosa, el código es este:

Código (csharp) [Seleccionar]

using MySql.Data.MySqlClient;

namespace CapaDatos
{
   class ConexionDB
   {
       private string CadenaConexion = "server=localhost; userid=x; password=x; database=x";

       public void ConectarYa()
       {
       MySqlConnection HacerConexion = new MySqlConnection(CadenaConexion);
       HacerConexion.Open(); //Abrimos conexión
       }
   }
}



Como veis dentro de la clase he creado el método ConectarYa y he puesto que no retorne nada, es correcto o tiene que retornar algo? Había pensado en poner return HacerConexion.Open() pero no sabría de que tipo es el retorno, y por cierto cuando abres una conexión se queda abierta todo el rato hasta que la cierres con otra línea de código o se cierre el programa??

Gracias!!!!
HAS DICHO ALGO NENAAAAAA?!

Eleкtro

#1
Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PMdentro de la clase he creado el método ConectarYa y he puesto que no retorne nada, es correcto o tiene que retornar algo?

Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PMme gustaría saber si hace falta que esa clase retorne algo o como va la cosa

La clase que estás instanciando, MySqlConnection, representa la conexión a la base de datos MySql que vas a abrir, y además es una clase disposable (utiliza recursos no administrados que deberían ser liberados cuando ya no se los necesite usar más), con esto ya tienes dos motivos fundamentales por los cuales deberías devolver la instancia de esa clase.




Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PMHabía pensado en poner return HacerConexion.Open() pero no sabría de que tipo es el retorno

Estás en Visual Studio, la IDE más completa y sofisticada en el mundo de la programación (¡tenlo presente!), ante la duda tan solo tienes que posicionar el puntero del ratón sobre el nombre del miembro ("Open") y la característica Intellisense de Microsoft te mostrará un tooltip diciéndote de que tipo es el miembro, o en caso de una función que tipo de valor de retorno devuelve... en este caso ninguno, puesto que MySqlConnection.Open() es un método sin valor de retorno.




Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PMhe creado una clase para hacer la conexión a la base de datos y poder reutilizarla cuantas veces quiera

Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PM
Código (csharp) [Seleccionar]
class ConexionDB

Una clase cuyo propósito sea proveer métodos de uso genérico, por lo general debe ser una clase "sellada" (es decir, no heredable).
sealed class ConexionDB

Además deberías declarar un constructor de accesibilidad privada para impedir que la clase pueda ser instanciada por equivocación. [/quote]
private ConexionDB() { }

Cita de: RevolucionVegana en  9 Abril 2017, 17:07 PM
Código (csharp) [Seleccionar]
public void ConectarYa()

Y por ese último motivo que acabo de mencionar, los métodos de uso genérico deberían tener una accesibilidad global.
public static void ConectarYa()

En general aquí abajo te muestro buenas prácticas de diseño que se deberían seguir según lo estipula en las directrices de diseño de Microsoft:

Código (csharp) [Seleccionar]
#region " usings "

using System.Diagnostics;
using MySql.Data.MySqlClient;

#endregion

namespace MySqlUtils {

   /// <summary>
   /// Contains helper methods for a <c>MySQL</c> database.
   /// </summary>
   public sealed class DatabaseHelper {

       #region " Constructors "

       [DebuggerNonUserCode()]
       private DatabaseHelper() { }

       #endregion

       #region " Public Methods "

       /// ----------------------------------------------------------------------------------------------------
       /// <summary>
       /// Establishes a connection to a <c>MySQL</c> Server database using the specified connection string.
       /// </summary>
       /// ----------------------------------------------------------------------------------------------------
       /// <example> This is a code example.
       /// <code>
       /// using (MySqlConnection connection = GetConnection("server=localhost; userid=x; password=x; database=x")) {
       ///     // ...
       /// }
       /// </code>
       /// </example>
       /// ----------------------------------------------------------------------------------------------------
       /// <param name="connectionString">
       /// The connection string used to open the <c>MySQL</c> database.
       /// </param>
       /// ----------------------------------------------------------------------------------------------------
       /// <returns>
       /// A <see cref="MySqlConnection"/> instance that represents the connection established with the <see cref="MySQL"/> database.
       /// </returns>
       /// ----------------------------------------------------------------------------------------------------
       [DebuggerStepThrough()]
       public static MySqlConnection GetConnection(string connectionString) {

           MySqlConnection connection = new MySqlConnection(connectionString);
           connection.Open();
           return connection;

       }

       #endregion

   }

}


Ejemplo de llamada:
Código (csharp) [Seleccionar]
MySqlConnection db = MySqlUtil.DatabaseHelper.GetConnection("MySQL query");

Si intentas hacer las cosas más o menos similar entonces estarás avanzando a pasos de gigante en el "nivel principiante", la estructurización/diseño es fundamental, te ayudará en todo, sobre todo a ser mas analítico o metódico. La documentación Xml es muy util y recomendable pero bueno si te parece algo muy tedioso de realizar entonces lo puedes ignorar, yo es que soy un maniático y un cansino del perfeccionismo, pero no te fijes en los tochos de documentación sino en la estructurización de todo lo demás... y en las nomenclaturas de los miembros, muy importante también (deberías intentar no escribir absolutamente nada en Español... ¡ni siquiera los commentarios!)

PD: Esto ha sido solo un consejo personal para intentar ayudarte un poco a que descubras como poder mejorar tus modelos, es mi opinión la cual se puede aceptar o rechazar sin problema; ¡que cada cual aprenda a programar como prefiera!.

¡Saludos!








RevolucionVegana

W O W que currada respuesta Elektro como se nota que estoy en tu terreno jaja vale muchas gracias al final lo había solucionado de forma muy chapuza porque me urge darme prisa con esto que estoy haciendo pero lo voy a cambiar ahora mismo y ya se lo que tengo que retornar gracias a ti!! Gracias Elektro y un saludo!
HAS DICHO ALGO NENAAAAAA?!