Professional Documents
Culture Documents
Hola amigos, bienvenidos a este importante post, este es el inicio para aprender a
crear una conexin en C# con MySQL, posteriormente realizaremos una insercin,
modificacin y eliminacin de datos en una base de datos desde C#, pero por ahora lo
importarte es crear la base de datos y crear la cadena de conexin en C#.
1.- Lo primero que debemos hacer es crear la base de datos en MySQL, lo cual yo uso
el software MySQL Workbench para crear bases de datos, si quieres aprender su uso
y creacin de base de datos (incluyendo diagrama E-R) puedes ver los tutoriales aqu.
En el siguiente video muestro una breve introduccin y la creacin de la base de
datos: http://www.youtube.com/watch?v=jI9c_wYgU1g
Cdigo para crear la BD y su respectiva tabla:
create database Tutorial;
use Tutorial;
CREATE TABLE Clientes (
IdCliente INT NOT NULL AUTO_INCREMENT,
Nombre VARCHAR(50) NOT NULL,
Apellido VARCHAR(45) NOT NULL,
Fecha_Nacimiento DATE NOT NULL,
Direccion Text,
PRIMARY KEY (IdCliente)
) ENGINE=InnoDB;
Lo siguiente que necesitamos es instalar el driver que proporciona mysql para
conectarnos desde .NET , el cual se llama MySQL Connector/Net, y lo puedes
descargar desde Aqu.
En el siguiente video les muestro la instalacin: http://www.youtube.com/watch?
v=m5WwaFwK3Wo
Luego de haber instalado el conector de mysql se puede decir que ya estamos listos
para trabajar en C# y conectarnos con la base de datos que hemos creado en mysql.
Lo que haremos ser crear un nuevo proyecto Windows forms al cual le
llamaremos ConexionCSharpconMySQL al cual le crearemos un formulario como
este:
MrFrankling
INSERTAR, MODIFICAR, ELIMINAR Y CONSULTAR REGISTROS EN MYSQL
DESDE C# - PARTE 1
Como ven, tiene cinco propiedades que son equivalentes a los cinco campos de la
tabla, al igual, tiene un constructor vaco public Cliente() { }, el cual se utiliza para
crear los objetos ya que de esta forma no recibe parmetros y podemos invocarlo sin
problemas. Por otra parte, tenemos otro constructor el cual tiene cinco parmetros,
podemos interpretar que los parmetros nos servirn para enviar o trasportar los datos
hacia las propiedades y posteriormente donde nosotros los queramos utilizar.
Lo siguiente que haremos ser agregar una nueva clase a la que llamaremos
ClientesDAL esta clase tendr mtodos que nos ejecutaran comandos hacia MySQL
tales como un Insert, delete, update, entre otros. Por el momento vamos aadir
el mtodo agregar el cual insertara un cliente a la BD. La clase quedara as:
public class ClientesDAL
{
public static int Agregar(Cliente pCliente)
{
int retorno = 0;
MySqlCommand comando=new MySqlCommand(string.Format("Insert into
clientes (Nombre, Apellido, Fecha_Nacimiento, Direccion) values ('{0}','{1}','{2}', '{3}')",
pCliente.Nombre, pCliente.Apellido, pCliente.Fecha_Nac, pCliente.Direccion),
BdComun.ObtnerCOnexion());
retorno = comando.ExecuteNonQuery();
return retorno;
}
}
Ya teniendo esto, nos dirigimos al formulario y programamos en el
evento clic del botn. Lo que se debe hacer es crear un cliente, es decir, llenar sus
respectivas propiedades y ejecutar el mtodo agregar para que nos inserte el cliente.
El cdigo seria el siguiente:
private void btnGuardar_Click(object sender, EventArgs e)
{
Cliente pCliente = new Cliente();
pCliente.Nombre = txtNombre.Text.Trim();
pCliente.Apellido = txtApellido.Text.Trim();
pCliente.Fecha_Nac = dtpFechaNacimiento.Value.Year + "/" +
dtpFechaNacimiento.Value.Month + "/" + dtpFechaNacimiento.Value.Day;
pCliente.Direccion = txtDireccion.Text.Trim();
int resultado = ClientesDAL.Agregar(pCliente);
if (resultado > 0)
{
MessageBox.Show("Cliente Guardado Con Exito!!", "Guardado",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("No se pudo guardar el cliente", "Fallo!!",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
De seguro surgen dudas, para que todo quede mas claro ac les dejo
el vdeo explicativo, que complementara lo anterior:
INSERTAR, MODIFICAR,
ELIMINAR Y CONSULTAR
REGISTROS EN MYSQL DESDE
C# - PARTE 2
Hola colegas, ahora vamos a continuar con la
segunda parte de los tutoriales sobre C# y MySQL, en
los que estamos aprendiendo a insertar, modificar,
eliminar y consultar registros desde C# en una tabla
de MySql (Clientes), en la parte anterior aprendimos
a insertar registros en la tabla clientes lo puedes ver
ac. En esta parte vamos aprender a consultar
registros, por lo cual realizaremos una bsqueda de
un cliente especifico por su nombre y apellido, para
poder mostrarlo en un
DataGridView, bsicamente seria una pequea
consulta hacia la tabla Clientes, Por lo tanto lo que
debemos realizar seria lo siguiente:
_lista.Add(pCliente);
}
}
return _lista;
}
else
MessageBox.Show("debe de seleccionar una fila");
}
Hola amigos/as bienvenidos a la parte tres sobre los tutoriales de insertar, eliminar,
modificar y consultar datos desde C# y MySQL, ya aprendimos a insertar y consultar,
para los que han estado siguiendo los anteriores vdeos se dieron cuenta que luego
de mostrar los datos del cliente en el datagridview seleccionbamos un cliente y
pasbamos los datos al formulario clientes, entonces ya teniendo los datos del cliente
en el formulario de registro podremos cambiar por ejemplo el nombre y al darle en
el botn actualizar nos debe actualizar los datos que hemos cambiado, para esto lo
primero que haremos sera agregar un nuevo mtodo en la clase ClientesDAL que si
recuerdas es la clase que utilizamos para interactuar con la BD, al mtodo le
nombraremos Actualizar y tendr el siguiente cdigo
public static int Actualizar(Cliente pCliente)
{
int retorno = 0;
MySqlConnection conexion = BdComun.ObtenerConexion();
El cdigo C# completo de la aplicacin (para los botones de conectar con servidor, usar
esquema, aadir select SQL y ejecutar consulta SQL, as como las funciones para
obtener las bases de datos de MySQL y las tablas de la base de datos seleccionada se
muestra a continuacin:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace AjpdSoftAccesoMySQLCsharp
{
public partial class formAccesoMySQL : Form
{
private MySqlConnection conexionBD;
private void obtenerBasesDatosMySQL ()
{
MySqlDataReader registrosObtenidosMySQL = null;
MySqlCommand cmd =
new MySqlCommand("SHOW DATABASES", conexionBD);
try
{
registrosObtenidosMySQL = cmd.ExecuteReader();
lsBD.Items.Clear();
while (registrosObtenidosMySQL.Read())
{
lsBD.Items.Add(registrosObtenidosMySQL.GetString(0));
}
}
catch (MySqlException ex)
{
MessageBox.Show("Error al obtener bases de datos de
MySQL: " +
ex.Message,"Error al obtener catlogos",
MessageBoxButtons.OK,MessageBoxIcon.Error);
}
finally
{
if (registrosObtenidosMySQL != null)
registrosObtenidosMySQL.Close();
}
}
private void obtenerTablasBDMysql(string bd)
{
MySqlDataReader reader = null;
try
{
conexionBD.ChangeDatabase(bd);
MySqlCommand cmd = new MySqlCommand("SHOW TABLES",
conexionBD);
reader = cmd.ExecuteReader();
lsTablas.Items.Clear();
while (reader.Read())
{
lsTablas.Items.Add(reader.GetString(0));
}
}
catch (MySqlException ex)
{
MessageBox.Show("Error al obtener la lista de tablas "
}
finally
{
if (reader != null) reader.Close();
}
public formAccesoMySQL()
{
InitializeComponent();
}
private void btConectar_Click(object sender, EventArgs e)
{
if (conexionBD != null)
conexionBD.Close();
string connStr =
String.Format("server={0};port={1};user id={2};
password={3}; " +
"database=mysql; pooling=false;" +
"Allow Zero Datetime=False;Convert Zero
Datetime=True",
txtServidor.Text,txtPuerto.Text, txtUsuario.Text,
txtContrasena.Text);
try
{
conexionBD = new MySqlConnection(connStr);
conexionBD.Open();
MySQL: " +
obtenerBasesDatosMySQL();
}
catch (MySqlException ex)
{
MessageBox.Show("Error al conectar al servidor de
ex.Message, "Error al conectar",
MessageBoxButtons.OK, MessageBoxIcon.Error);
try
{
tabla = new DataTable();
datosAdapter = new MySqlDataAdapter(txtSQL.Text,
conexionBD);
comandoSQL = new
MySqlCommandBuilder(datosAdapter);
datosAdapter.Fill(tabla);
dbGrid.DataSource = tabla;
}
catch (Exception ex)
{
MessageBox.Show("Error al mostrar los datos de la
tabla [" +
" +
".",
http://www.taringa.net/posts/hazlo-tu-mismo/9227381/Programando-en-C-14.html
Comenzaremos con la primera clase:
<?
class Persona
{
protected string SNombre, SApellido; // Notese que dice protec
ted. El hecho de que no diga "private" es por que la clase que hereda
de esta ve las variables y el resto del programa no (De ahora en mas s
e llamaran al momento de declarar las variables "Atributos").
public string ElNombre //Propiedades para declarar los valores
del nombre y apellido de la persona.
{
get
{
return SNombre;
}
set
{
SNombre = value;
}
}
>
Es la clase bsica para administrar los datos de cualquier persona. Esta suele ser una clase
que se usa constantemente, siendo que si tienen que poner varios datos de distintas clases
de personas, como es vendedor, cliente, administrador, etc, todos se vinculan con una clase
"persona".
<?
class Cliente : Persona // Con esta notacin fijens que lo que ha
go es poner el nombre de la clase que es la heredada y luego de los do
s puntos, la causante.
{
private int IDNI, ITelefono;
public int ElDNI
{
get
{
return IDNI;
}
set
{
}
IDNI = value;
}
public int ElTel
{
get
{
return ITelefono;
}
set
{
ITelefono = value;
}
}
public void GetDatos(ListBox List)
{
string Cadena;
List.Items.Add(SApellido + " " + SNombre + " Tel: " + ITel
efono.ToString() + " DNI: " + IDNI.ToString()); // Lo que armo ac es
una cadena de caracteres, fijens que poniendo el signo + uno dos cade
nas.
Cadena = SApellido.Substring(2, SApellido.Length); // Por
otro lado podemos ver que si una cadena toma la otra o fragmentos de
la anterior, lo que hago ac es decirle que tome la posicin 2 y copie
en "Cadenas" hasta el final de la cadena.
}
}
>
NOTA: El ltimo cdigo que dice Cadena = etc, es solo demostrativo para un uso de cadena
de caracteres, durante los siguientes post ir dando algunos comandos ms.
En el siguiente paso dar el ejemplo de como implementar todo esto en un formulario, este
formulario principal tiene los siguientes elementos:
5 botones, los cuales todos estn nombrados genricamente. Un error mio es no haber
puesto en el nombre de la variable del boton para que serva cada uno, por lo tanto dejo una
aclaracin de que va escrito en el texto del botn para que se entienda para que sirve cada
cosa con la simple lectura.
<?
break;
case 1:
for (int i = 0; i < 5; i++)
{
if (LosClientes[i] != null && BuscarC
L.tbBusqueda.Text == LosClientes[i].ElApellido)
{
LosClientes[i].GetDatos(listBox1);
NUM = i;
}
}
break;
case 2:
for (int i = 0; i < 5; i++)
{
int N = Convert.ToInt32(BuscarCL.tbBusqued
a.Text); //Ojo que hay que poner nmeros, ya me explayar en como solu
cionar estas cosas.
if (LosClientes[i] != null && N == LosClie
ntes[i].ElDNI)
{
LosClientes[i].GetDatos(listBox1);
NUM = i;
}
}
break;
case 3:
for (int i = 0; i < 5; i++)
{
int N = Convert.ToInt32(BuscarCL.tbBusqued
a.Text);
if (LosClientes[i] != null && N == LosClie
ntes[i].ElTel)
{
LosClientes[i].GetDatos(listBox1);
NUM = i;
}
}
break;
}
}
}
private void button5_Click(object sender, EventArgs e)
//Botn de muestra de datos del cliente, le puse "Mostrar" encima.
{
listBox1.Items.Clear();
listBox1.Items.Clear();
for (int i = 0; i < 5; i++)
{
if (LosClientes[i] != null)
{
LosClientes[i].GetDatos(listBox1);
}
if (Vendedores[i] != null)
{
listBox2.Items.Add(Vendedores[i].ElNombre + " " +
Vendedores[i].ElApellido);
}
}
}
private void button1_Click(object sender, EventArgs e) // Bot
n para modificar datos del cliente, le puse "M.Cliente" encima.
{
Form2 Clientes = new Form2();
if (Clientes.ShowDialog() == DialogResult.OK && NUM < 5) /
/Esto es para modificar los datos del cliente.
{
LosClientes[NUM].ElNombre = Clientes.tbNombre.Text;
LosClientes[NUM].ElApellido = Clientes.tbApellido.Text
;
LosClientes[NUM].ElDNI = Convert.ToInt32(Clientes.tbDN
I.Text);
LosClientes[NUM].ElTel = Convert.ToInt32(Clientes.tbTe
l.Text);
// Procuren poner nmeros en los dos textbox por que se les puede romp
er el programa. Mas adelante dar forma para que no pase eso.
}
>