C# ClassDBConnect: Clase para trabajar con MySQL

En este caso vamos a crear una clase para encapsular todas las operaciones que queramos realizar sobre la BD MySQL.  La clase la implementaremos en un fichero independiente dentro del namespace del proyecto.

La clase contiene atributos con los parámetros de conexión de tipo string y una instancia de la clase  MySqlConnection, todos ellos son privados.

Antes de comenzar el ejercicio se me ocurren mejores formas de codificarlo, lo ideal sería crear una clase general con los atributos de conexión a MySQL y la variable con el objeto  MySqlConnection. De esta clase general podemos heredar nuevas clases, una para cada tabla por ejemplo. Tampoco parece optimo abrir y cerrar la conexión con la BD en cada sentencia SQL.

Definición atributos básicos de la clase


public class DBConnect
{
//Declaramos los atributos como private solo accesible desde
//los métodos de las clase
private MySqlConnection connection;

private string server;
private string database;
private string uid;
private string password;

 

La clase  MySqlConnection se instancia en el constructor de nuestra clase  DBConnect llamando a la función  Initialize.

Constructor y definición de atributos


public DBConnect()
{
Initialize();
}

private void Initialize()
{
server = "localhost";
database = "mydb";
uid = "iker";
password = "passw0rd";
string connectionString;

connectionString = "SERVER=" + server + ";" + "DATABASE=" +
database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";


connection = new MySqlConnection(connectionString);
}

Conexión y desconexión con MySQL

Los primeros métodos de nuestra clase DBConnect serán para abrir y cerrar la conexión con la BD. Los declararemos como privados, de esta forma sólo se puede abrir o cerrar la conexión desde el código de nuestra clase, más adelante veremos porque, cuando lanzamos una sentencia Select por ejemplo abrirá y cerrará la conexión, lo mismo para Delete, Insert… (el rendimiento no será el optimo).

 private bool OpenConnection()
         {
             try
             {
                 connection.Open();
                 Console.WriteLine("Connection ok.");
                 return true;
             }
             catch (MySqlException ex)
             {
                 Console.WriteLine("Open connection Error ["+ex.Number+"]: "+ex.Message);
                 return false;
             }
                          
         }
 
         //Close connection
         private bool CloseConnection()
         {
             try
             {
                 connection.Close();
                 return true;
             }
             catch (MySqlException ex)
             {
                 Console.WriteLine("Close connection Error ["+ex.Number+"]: "+ex.Message);
                 return false;
             }
                         
         } 

Método para obtener número de registros de la tabla

Para ejecutar la sentencia que nos retorne el número de registros de una tabla empleamos el objeto  MySqlCommand en la función count. Al constructor de  MySqlCommand le pasamos la sentencia SELECT y el atributo connection que establecemos llamando al método privado OpenConnection. Con el método  ExecuteScalar del objeto  MySqlCommand.


//Count statement
public int Count()
{
string query = "SELECT Count(*) FROM customer";
int Count = -1;

//Open Connection
if (this.OpenConnection() == true)
{
//Create Mysql Command
MySqlCommand cmd = new MySqlCommand(query, connection);

//ExecuteScalar will return one value
Count = int.Parse(cmd.ExecuteScalar()+"");

//close Connection
this.CloseConnection();

return Count;
}
else
{
return Count;
}
}

Uso de la clase  DBConnect


using System;

namespace ClassDBConnect
{
class Program
{
public static void Main(string[] args)
{
DBConnect dbcon = new DBConnect();
Console.WriteLine("customer table records:"+dbcon.Count());

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}

 

Referencias

Anuncios

C# MysqlConnector: Conexión a la base de datos (MySqlConnection)

El objetivo del siguiente ejercicio es crear una ventana donde definir los parámetros de conexión a una BD MySQL y pulsando un botón establezca la conexión.

csharp8

En mi caso como estoy tratando de conectarme a una BD remota en Hostgator lo primero que debemos hacer es habilitar mi dirección IP pública (para averiguarla https://www.hostgator.com/ip) en el hosting para que me permita conectarme.

Básicamente la solo vamos a usar la clase  MySqlConnection pasando la cadena de conexión como parámetro al constructor de la clase y los métodos Open y Close para abrir y cerrar la conexión.

Referencias:

 using System;
 using System.Collections.Generic;
 using System.Drawing;
 using System.Windows.Forms;
 using MySql.Data.MySqlClient;
 
 namespace MysqlConnector
 {
     public partial class MainForm : Form
     {
         public MainForm()
         {            
             InitializeComponent();            
         }
         
         void BtnConnectClick(object sender, EventArgs e)
         {
             MySqlConnection connection;
             string connectionString;
             string ServerName;
             string Database;
             string User;
             string Password;
             
             ServerName=txtServer.Text;
             Database=txtDatabaseName.Text;            
             
             User=txtUsr.Text;
             //MessageBox.Show(User);
             
             Password=txtPwd.Text;
             //MessageBox.Show(Password);
         
             connectionString = "SERVER=" + ServerName + ";" + "DATABASE=" +
                 Database + ";" + "UID=" + User + ";" + "PASSWORD=" + Password + ";";
                 
             //MessageBox.Show(connectionString);
             
             connection = new MySqlConnection(connectionString);
             
             try
             {
                 connection.Open();
                 MessageBox.Show("Connection ok!");
             }
             catch (MySqlException ex)
             {
                 MessageBox.Show("Connection Error string '"+connectionString+"' ["+ex.Number+"]: "+ex.Message);
             }
             
             
             connection.Close();
     
         }
     }
 }