Para este ejemplo, tomaremos como base el proyecto anterior y comensaremos a modificar unicamente a las clases del proyecto AccesoDato, en los demas proyectos no sera necesario realizar cambio alguno. Esto es una de las ventajas de trabajar en capas.
Los cambios seran en la clase conexion.cs
using System;
namespace AccesoDato
{
public sealed class conexion
{
public static string LeerCC
{
get { return "Server=localhost; Port=3306; User Id=root; password=123; Persist Security Info=True; database=agenda"; }
}
}
}
En la clase adDistrito.cs
using System;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
namespace AccesoDato
{
public sealed class adDistrito
{
public static bool Grabar(Entidades.Distrito pEntidad)
{
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// Contamos cuantos distritos existen segun el coddistrito o nomdistrito
using (var cmd = new MySqlCommand(@"select ifnull(count(coddistrito),0) from distritos where coddistrito=@cod or nomdistrito=@nom;", cn))
{
cmd.Parameters.AddWithValue("cod", pEntidad.coddistrito);
cmd.Parameters.AddWithValue("nom", pEntidad.nomdistrito);
cn.Open();
// Ejecutamos el comando y verificamos si el resultado es mayor a cero actualizar, caso contrario insertar
if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
{
// Si es mayor a cero, quiere decir que existe al menos un registro con los datos ingresados
// Entonces antes de actualizar, hacer las siguientes comprobaciones
if (pEntidad.coddistrito == 0)
throw new Exception("El distrito ya esta registrado en el sistema, verifique los datos por favor!...");
// Verifica si ya existe un registro con el mismo nombre del distrito
cmd.CommandText = @"select ifnull(count(coddistrito),0) from distritos where coddistrito<>@cod and nomdistrito=@nom;";
if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
throw new Exception("No se puede grabar un valor duplicado, verifique los datos por favor!...");
// Si las comprobaciones anteriores resultaron ser falsa, entonces actualizar
cmd.CommandText = @"update distritos set nomdistrito=@nom where coddistrito=@cod;";
}
else
cmd.CommandText = @"insert into distritos (nomdistrito) values (@nom);";
// Ejecutamos el comando que puede ser para update o insert
return Convert.ToBoolean(cmd.ExecuteNonQuery());
}
}
}
public static bool Eliminar(Entidades.Distrito pEntidad)
{
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// Contar la cantidad de amigos que existe en un determinado distrito
using (var cmd = new MySqlCommand(@"select ifnull(count(codamigo),0) from amigos where coddistrito=@cod;", cn))
{
cmd.Parameters.AddWithValue("cod", pEntidad.coddistrito);
cn.Open();
// Si es mayor a cero, quiere decir que existen amigos en dicho distrito que intentamos eliminar
if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
throw new Exception("No es posible eliminar el registro, ya que éste se encuentra en uso...");
cmd.CommandText = "delete from distritos where coddistrito=@cod;";
return Convert.ToBoolean(cmd.ExecuteNonQuery());
}
}
}
public static List Leer(string dato)
{
// Crea un obj. lista de tipo Distrito
var lista = new List();
// Crear el objeto de conexion
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// crear el comando
using (var cmd = new MySqlCommand("select coddistrito, nomdistrito from distritos where nomdistrito like Concat(@nom, '%');", cn))
{
//Asignar valores a los parametros
cmd.Parameters.AddWithValue("nom", dato);
// Abrir el objeto de conexion
cn.Open();
using (var dr = cmd.ExecuteReader())
{
while (dr.Read())
{
// Crea un objeto del distrito
var oDistrito = new Entidades.Distrito();
oDistrito.coddistrito = Convert.ToInt32(dr[dr.GetOrdinal("coddistrito")]);
oDistrito.nomdistrito = Convert.ToString(dr[dr.GetOrdinal("nomdistrito")]);
// El objeto distrito es agregado a la lista
lista.Add(oDistrito);
oDistrito = null;
}
}
// Retorna una lista de datos
return lista;
}
}
}
}
}
En la clase adAmigo.cs
using System;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
namespace AccesoDato
{
public sealed class adAmigo
{
public static bool Grabar(Entidades.Amigo pEntidad)
{
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// Contamos cuantos amigos existen segun el codamigo o nombre
using (var cmd = new MySqlCommand(@"select ifnull(count(codamigo),0) from amigos where codamigo=@cod or dni=@dni;", cn))
{
//Asignar valores a los parametros
cmd.Parameters.AddWithValue("cod", pEntidad.codamigo);
cmd.Parameters.AddWithValue("cdis", pEntidad.edistrito.coddistrito);
cmd.Parameters.AddWithValue("nom", pEntidad.nombre);
cmd.Parameters.AddWithValue("dni", pEntidad.dni);
cmd.Parameters.AddWithValue("fn", pEntidad.fecnac);
cmd.Parameters.AddWithValue("sex", pEntidad.sexo);
cmd.Parameters.AddWithValue("dir", pEntidad.direccion);
cmd.Parameters.AddWithValue("telef", pEntidad.telefono);
cn.Open();
// Ejecutamos el comando y verificamos si el resultado es mayor a cero actualizar, caso contrario insertar
if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
{
// Si es mayor a cero, quiere decir que existe al menos un registro con los datos ingresados
// Entonces antes de actualizar, hacer las siguientes comprobaciones
if (pEntidad.codamigo == 0)
throw new Exception("El amigo(a) ya esta registrado en el sistema, verifique los datos por favor!...");
// Verifica si ya existe un registro con el mismo nombre del distrito
cmd.CommandText = @"select ifnull(count(codamigo),0) from amigos where codamigo<>@cod and dni=@dni;";
if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
throw new Exception("No se puede grabar un valor duplicado, verifique los datos por favor!...");
// Si las comprobaciones anteriores resultaron ser falsa, entonces actualizar
cmd.CommandText = @"update amigos set coddistrito=@cdis, nombre=@nom, dni=@dni, fecnac=@fn, sexo=@sex, direccion=@dir, telefono=@telef where codamigo=@cod;";
}
else
cmd.CommandText = @"insert into amigos (coddistrito, nombre, dni, fecnac, sexo, direccion, telefono) values (@cdis, @nom, @dni, @fn, @sex, @dir, @telef);";
// Ejecutamos el comando que puede ser para update o insert
return Convert.ToBoolean(cmd.ExecuteNonQuery());
}
}
}
public static bool Eliminar(Entidades.Amigo pEntidad)
{
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// Como nadie depende de esta entidad (amigos) no habra comprobaciones de dependencia
using (var cmd = new MySqlCommand(@"delete from amigos where codamigo=@cod;", cn))
{
cmd.Parameters.AddWithValue("cod", pEntidad.codamigo);
cn.Open();
// Ejecuta el comando
return Convert.ToBoolean(cmd.ExecuteNonQuery());
}
}
}
public static List Leer(string dato)
{
// Crea un obj. lista de tipo Amigo
var lista = new List();
// Crear el objeto de conexion
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// crear el comando
using (var cmd = new MySqlCommand("select codamigo, nomdistrito, nombre, dni, fecnac, sexo, direccion, telefono from distritos inner join amigos on distritos.coddistrito = amigos.coddistrito where nombre like Concat(@nom, '%');", cn))
{
//Asignar valores a los parametros
cmd.Parameters.AddWithValue("nom", dato);
// Abrir el objeto de conexion
cn.Open();
using (var dr = cmd.ExecuteReader())
{
while (dr.Read())
{
// Crea un objeto del distrito
var oDistrito = new Entidades.Distrito();
var oAmigo = new Entidades.Amigo();
oAmigo.codamigo = Convert.ToInt32(dr[dr.GetOrdinal("codamigo")]);
// Aqui obtenemos el nombre del distrito para luego ser enviado al objeto amigo
oDistrito.nomdistrito = Convert.ToString(dr[dr.GetOrdinal("nomdistrito")]);
oAmigo.edistrito = oDistrito;
oAmigo.nombre = Convert.ToString(dr[dr.GetOrdinal("nombre")]);
oAmigo.dni = Convert.ToString(dr[dr.GetOrdinal("dni")]);
oAmigo.fecnac = Convert.ToDateTime(dr[dr.GetOrdinal("fecnac")]);
oAmigo.sexo = Convert.ToString(dr[dr.GetOrdinal("sexo")]);
oAmigo.direccion = Convert.ToString(dr[dr.GetOrdinal("direccion")]);
oAmigo.telefono = Convert.ToString(dr[dr.GetOrdinal("telefono")]);
// El objeto amigo es agregado a la lista
lista.Add(oAmigo);
// marcamos a los objetos creamos como nulos
oDistrito = null;
oAmigo = null;
}
}
// Retorna una lista de datos
return lista;
}
}
}
}
}
NOTA: para trabajar con MySQL debemos de instalar el conector .Net de MySQL.
Descargar
Los cambios seran en la clase conexion.cs
using System;
namespace AccesoDato
{
public sealed class conexion
{
public static string LeerCC
{
get { return "Server=localhost; Port=3306; User Id=root; password=123; Persist Security Info=True; database=agenda"; }
}
}
}
En la clase adDistrito.cs
using System;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
namespace AccesoDato
{
public sealed class adDistrito
{
public static bool Grabar(Entidades.Distrito pEntidad)
{
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// Contamos cuantos distritos existen segun el coddistrito o nomdistrito
using (var cmd = new MySqlCommand(@"select ifnull(count(coddistrito),0) from distritos where coddistrito=@cod or nomdistrito=@nom;", cn))
{
cmd.Parameters.AddWithValue("cod", pEntidad.coddistrito);
cmd.Parameters.AddWithValue("nom", pEntidad.nomdistrito);
cn.Open();
// Ejecutamos el comando y verificamos si el resultado es mayor a cero actualizar, caso contrario insertar
if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
{
// Si es mayor a cero, quiere decir que existe al menos un registro con los datos ingresados
// Entonces antes de actualizar, hacer las siguientes comprobaciones
if (pEntidad.coddistrito == 0)
throw new Exception("El distrito ya esta registrado en el sistema, verifique los datos por favor!...");
// Verifica si ya existe un registro con el mismo nombre del distrito
cmd.CommandText = @"select ifnull(count(coddistrito),0) from distritos where coddistrito<>@cod and nomdistrito=@nom;";
if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
throw new Exception("No se puede grabar un valor duplicado, verifique los datos por favor!...");
// Si las comprobaciones anteriores resultaron ser falsa, entonces actualizar
cmd.CommandText = @"update distritos set nomdistrito=@nom where coddistrito=@cod;";
}
else
cmd.CommandText = @"insert into distritos (nomdistrito) values (@nom);";
// Ejecutamos el comando que puede ser para update o insert
return Convert.ToBoolean(cmd.ExecuteNonQuery());
}
}
}
public static bool Eliminar(Entidades.Distrito pEntidad)
{
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// Contar la cantidad de amigos que existe en un determinado distrito
using (var cmd = new MySqlCommand(@"select ifnull(count(codamigo),0) from amigos where coddistrito=@cod;", cn))
{
cmd.Parameters.AddWithValue("cod", pEntidad.coddistrito);
cn.Open();
// Si es mayor a cero, quiere decir que existen amigos en dicho distrito que intentamos eliminar
if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
throw new Exception("No es posible eliminar el registro, ya que éste se encuentra en uso...");
cmd.CommandText = "delete from distritos where coddistrito=@cod;";
return Convert.ToBoolean(cmd.ExecuteNonQuery());
}
}
}
public static List
{
// Crea un obj. lista de tipo Distrito
var lista = new List
// Crear el objeto de conexion
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// crear el comando
using (var cmd = new MySqlCommand("select coddistrito, nomdistrito from distritos where nomdistrito like Concat(@nom, '%');", cn))
{
//Asignar valores a los parametros
cmd.Parameters.AddWithValue("nom", dato);
// Abrir el objeto de conexion
cn.Open();
using (var dr = cmd.ExecuteReader())
{
while (dr.Read())
{
// Crea un objeto del distrito
var oDistrito = new Entidades.Distrito();
oDistrito.coddistrito = Convert.ToInt32(dr[dr.GetOrdinal("coddistrito")]);
oDistrito.nomdistrito = Convert.ToString(dr[dr.GetOrdinal("nomdistrito")]);
// El objeto distrito es agregado a la lista
lista.Add(oDistrito);
oDistrito = null;
}
}
// Retorna una lista de datos
return lista;
}
}
}
}
}
En la clase adAmigo.cs
using System;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
namespace AccesoDato
{
public sealed class adAmigo
{
public static bool Grabar(Entidades.Amigo pEntidad)
{
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// Contamos cuantos amigos existen segun el codamigo o nombre
using (var cmd = new MySqlCommand(@"select ifnull(count(codamigo),0) from amigos where codamigo=@cod or dni=@dni;", cn))
{
//Asignar valores a los parametros
cmd.Parameters.AddWithValue("cod", pEntidad.codamigo);
cmd.Parameters.AddWithValue("cdis", pEntidad.edistrito.coddistrito);
cmd.Parameters.AddWithValue("nom", pEntidad.nombre);
cmd.Parameters.AddWithValue("dni", pEntidad.dni);
cmd.Parameters.AddWithValue("fn", pEntidad.fecnac);
cmd.Parameters.AddWithValue("sex", pEntidad.sexo);
cmd.Parameters.AddWithValue("dir", pEntidad.direccion);
cmd.Parameters.AddWithValue("telef", pEntidad.telefono);
cn.Open();
// Ejecutamos el comando y verificamos si el resultado es mayor a cero actualizar, caso contrario insertar
if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
{
// Si es mayor a cero, quiere decir que existe al menos un registro con los datos ingresados
// Entonces antes de actualizar, hacer las siguientes comprobaciones
if (pEntidad.codamigo == 0)
throw new Exception("El amigo(a) ya esta registrado en el sistema, verifique los datos por favor!...");
// Verifica si ya existe un registro con el mismo nombre del distrito
cmd.CommandText = @"select ifnull(count(codamigo),0) from amigos where codamigo<>@cod and dni=@dni;";
if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
throw new Exception("No se puede grabar un valor duplicado, verifique los datos por favor!...");
// Si las comprobaciones anteriores resultaron ser falsa, entonces actualizar
cmd.CommandText = @"update amigos set coddistrito=@cdis, nombre=@nom, dni=@dni, fecnac=@fn, sexo=@sex, direccion=@dir, telefono=@telef where codamigo=@cod;";
}
else
cmd.CommandText = @"insert into amigos (coddistrito, nombre, dni, fecnac, sexo, direccion, telefono) values (@cdis, @nom, @dni, @fn, @sex, @dir, @telef);";
// Ejecutamos el comando que puede ser para update o insert
return Convert.ToBoolean(cmd.ExecuteNonQuery());
}
}
}
public static bool Eliminar(Entidades.Amigo pEntidad)
{
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// Como nadie depende de esta entidad (amigos) no habra comprobaciones de dependencia
using (var cmd = new MySqlCommand(@"delete from amigos where codamigo=@cod;", cn))
{
cmd.Parameters.AddWithValue("cod", pEntidad.codamigo);
cn.Open();
// Ejecuta el comando
return Convert.ToBoolean(cmd.ExecuteNonQuery());
}
}
}
public static List
{
// Crea un obj. lista de tipo Amigo
var lista = new List
// Crear el objeto de conexion
using (var cn = new MySqlConnection(conexion.LeerCC))
{
// crear el comando
using (var cmd = new MySqlCommand("select codamigo, nomdistrito, nombre, dni, fecnac, sexo, direccion, telefono from distritos inner join amigos on distritos.coddistrito = amigos.coddistrito where nombre like Concat(@nom, '%');", cn))
{
//Asignar valores a los parametros
cmd.Parameters.AddWithValue("nom", dato);
// Abrir el objeto de conexion
cn.Open();
using (var dr = cmd.ExecuteReader())
{
while (dr.Read())
{
// Crea un objeto del distrito
var oDistrito = new Entidades.Distrito();
var oAmigo = new Entidades.Amigo();
oAmigo.codamigo = Convert.ToInt32(dr[dr.GetOrdinal("codamigo")]);
// Aqui obtenemos el nombre del distrito para luego ser enviado al objeto amigo
oDistrito.nomdistrito = Convert.ToString(dr[dr.GetOrdinal("nomdistrito")]);
oAmigo.edistrito = oDistrito;
oAmigo.nombre = Convert.ToString(dr[dr.GetOrdinal("nombre")]);
oAmigo.dni = Convert.ToString(dr[dr.GetOrdinal("dni")]);
oAmigo.fecnac = Convert.ToDateTime(dr[dr.GetOrdinal("fecnac")]);
oAmigo.sexo = Convert.ToString(dr[dr.GetOrdinal("sexo")]);
oAmigo.direccion = Convert.ToString(dr[dr.GetOrdinal("direccion")]);
oAmigo.telefono = Convert.ToString(dr[dr.GetOrdinal("telefono")]);
// El objeto amigo es agregado a la lista
lista.Add(oAmigo);
// marcamos a los objetos creamos como nulos
oDistrito = null;
oAmigo = null;
}
}
// Retorna una lista de datos
return lista;
}
}
}
}
}
NOTA: para trabajar con MySQL debemos de instalar el conector .Net de MySQL.
Descargar
0 comentarios:
Publicar un comentario