Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (6-41) Programación 3 capas Capa Datos Clase DCategoria
Buen día amigos, En este artículo seguiremos trabajando utilizando programación en 3 capas y el paradigma de programación Orientada a Objetos, implementaremos clase DCategoria en la capa datos donde estarán las variables (atributos) y las propiedades ó métodos setter y getter (para encapsular los campos), además de los métodos para insertar, editar, eliminar, mostrar y buscar registros en la tabla categoría de la base de datos en SQL Server 2014 directamente desde Visual Studio 2013 utilizando como lenguaje de programación Csharp.
Pueden descargar el paquete del proyecto desarrollado en el curso, la base de datos, los procedimientos almacenados y el sistema completo hasta el Video 41 desde:
Puedes descargar la versión completa del proyecto con todas las funcionalidades terminadas desde:
Pueden seguir el curso completo y aprender a desarrollar un Sistema de Ventas en Csharp.Net utilizando como IDE de desarrollo Visual Studio 2013 y como gestor de Base de datos SQL Server 2014 desde:
No se olviden siempre de Visitar mi canal www.youtube.com/jcarlosad7 para ver los nuevos cursos.
Capa Datos
Es donde residen los datos y es la encargada de acceder a los mismos. Está formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de Negocio.
- Capa Datos
- Clase Conexión
- Clase DCategoría
- Capa Negocio
- Capa Presentación
Tabla Categoría
Código clase DCategoria
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
//Importaciones necesarias
using
System.Data;
using
System.Data.SqlClient;
namespace CapaDatos
{
public class dCategoria
{
private int VarIdcategoria;
private string VarNombre;
private string VarDescripcion;
public string TextoBuscar;
//Constructor
vacío
public
dCategoria()
{
}
//Constructor con parámetros
public dCategoria(int Idcategoria,string Nombre,string
Descripcion)
{
this.VarIdcategoria
= Idcategoria;
this.VarNombre
= Nombre;
this.VarDescripcion =
Descripcion;
}
//Métodos setter and Getter
#region Metodos Get y Set
public int Idcategoria
{
get { return VarIdcategoria; }
set { VarIdcategoria = value; }
}
public string Nombre
{
get { return VarNombre; }
set { VarNombre = value; }
}
public string Descripcion
{
get { return VarDescripcion; }
set { VarDescripcion = value; }
}
#endregion
//Método utilizado para
insertar una Categoría
public string Insertar(dCategoria Categoria)
{
string Rpta = "";
SqlConnection SqlCon = new SqlConnection();
try
{
//1. Establecer la
cadena de conexión
SqlCon.ConnectionString = Conexion.Cn;
//2. Abrir la
conexión de la BD
SqlCon.Open();
//3. Establecer el comando
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandText = "spinsertar_categoria";
SqlCmd.CommandType
= CommandType.StoredProcedure;
//4.
Agregar los parámetros al comando
//Establecemos los
valores para el parámetro
//@idcategoria del
Procedimiento Almacenado
SqlParameter
ParIdcategoria = new SqlParameter();
ParIdcategoria.ParameterName = "@idcategoria";
ParIdcategoria.SqlDbType = SqlDbType.Int;
//Le declaramos que
el parámetro es de salida,
//porque obtendremos
el código generado por la base de datos
ParIdcategoria.Direction = ParameterDirection.Output;
SqlCmd.Parameters.Add(ParIdcategoria);
//Agregamos el
parámetro al comando
//Establecemos los
valores para el parámetro
//@nombre del
Procedimiento Almacenado
SqlParameter
ParNombre = new SqlParameter();
ParNombre.ParameterName = "@nombre";
ParNombre.SqlDbType = SqlDbType.VarChar;
ParNombre.Size = 100;
ParNombre.Value = Categoria.Nombre;
SqlCmd.Parameters.Add(ParNombre);
//Agregamos el
parámetro al comando
//Establecemos los
valores para el parámetro
//@descripción del
Procedimiento Almacenado
SqlParameter
ParDescripcion = new SqlParameter();
ParDescripcion.ParameterName = "@descripcion";
ParDescripcion.SqlDbType = SqlDbType.VarChar;
ParDescripcion.Size = 256;
ParDescripcion.Value =
Categoria.Descripcion;
SqlCmd.Parameters.Add(ParDescripcion);
//Agregamos el
parámetro al comando
//5. Ejecutamos el commando
Rpta = SqlCmd.ExecuteNonQuery() ==
1 ? "OK" : "No
se ingreso el registro de forma correcta";
}
catch (Exception ex)
{
Rpta
= ex.Message;
}
finally
{
//6. Cerramos la
conexion con la BD
if
(SqlCon.State == ConnectionState.Open) SqlCon.Close();
}
return
Rpta;
}
//Método utilizado para
actualizar un Producto
public string Editar(dCategoria Categoria)
{
string Rpta = "";
SqlConnection SqlCon = new SqlConnection();
try
{
//1. Establecer la
cadena de conexión
SqlCon.ConnectionString = Conexion.Cn;
//2. Abrir la
conexión de la BD
SqlCon.Open();
//3. Establecer el comando
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandText = "spEditar_Categoria";
SqlCmd.CommandType
= CommandType.StoredProcedure;
//4.
Agregar los parámetros al comando
//Establecemos los
valores para el parámetro
//@idcategoria del
Procedimiento Almacenado
SqlParameter
ParIdcategoria = new SqlParameter();
ParIdcategoria.ParameterName = "@idcategoria";
ParIdcategoria.SqlDbType = SqlDbType.Int;
ParIdcategoria.Value
= Categoria.Idcategoria;
SqlCmd.Parameters.Add(ParIdcategoria);
//Agregamos el
parámetro al comando
//Establecemos los
valores para el parámetro
//@nombre del
Procedimiento Almacenado
SqlParameter
ParNombre = new SqlParameter();
ParNombre.ParameterName = "@nombre";
ParNombre.SqlDbType = SqlDbType.VarChar;
ParNombre.Size = 100;
ParNombre.Value = Categoria.Nombre;
SqlCmd.Parameters.Add(ParNombre);
//Agregamos el
parámetro al comando
//Establecemos los
valores para el parámetro
//@descripcion del
Procedimiento Almacenado
SqlParameter
ParDescripcion = new SqlParameter();
ParDescripcion.ParameterName = "@descripcion";
ParDescripcion.SqlDbType = SqlDbType.VarChar;
ParDescripcion.Size = 256;
ParDescripcion.Value =
Categoria.Descripcion;
SqlCmd.Parameters.Add(ParDescripcion);
//Agregamos el
parámetro al comando
//5. Ejecutamos el
commando
Rpta = SqlCmd.ExecuteNonQuery() ==
1 ? "OK" : "No
se actualizo el registro de forma correcta";
}
catch (Exception ex)
{
Rpta
= ex.Message;
}
finally
{
//6. Cerramos la
conexión con la BD
if
(SqlCon.State == ConnectionState.Open) SqlCon.Close();
}
return
Rpta;
}
//Método utilizado para
eliminar un Producto
public string Eliminar(dCategoria Categoria)
{
string Rpta = "";
SqlConnection SqlCon = new SqlConnection();
try
{
//1. Establecer la
cadena de conexión
SqlCon.ConnectionString = Conexion.Cn;
//2. Abrir la
conexión de la BD
SqlCon.Open();
//3. Establecer el comando
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandText = "speliminar_categoria";
SqlCmd.CommandType
= CommandType.StoredProcedure;
//4.
Agregar los parámetros al comando
//Establecemos los
valores para el parámetro
//@idcategoria del
Procedimiento Almacenado
SqlParameter
ParIdcategoria = new SqlParameter();
ParIdcategoria.ParameterName = "@idcategoria";
ParIdcategoria.SqlDbType = SqlDbType.Int;
ParIdcategoria.Value
= Categoria.Idcategoria;
SqlCmd.Parameters.Add(ParIdcategoria);
//Agregamos el
parámetro al comando
//5. Ejecutamos el commando
Rpta = SqlCmd.ExecuteNonQuery() ==
1 ? "OK" : "No
se pudo eliminar el registro";
}
catch (Exception ex)
{
Rpta
= ex.Message;
}
finally
{
//6. Cerramos la
conexión con la BD
if (SqlCon.State
== ConnectionState.Open) SqlCon.Close();
}
return
Rpta;
}
//Método utilizado para
obtener todas las categorías de la base de datos
public DataTable Mostrar()
{
DataTable DtResultado = new DataTable("categoria");
SqlConnection SqlCon = new SqlConnection();
try
{
//1. Establecer la
cadena de conexion
SqlCon.ConnectionString = Conexion.Cn;
//2. Establecer el
comando
SqlCommand
SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;//La
conexión que va a usar el comando
SqlCmd.CommandText = "spmostrar_categoria";//El
comando a ejecutar
SqlCmd.CommandType = CommandType.StoredProcedure;
//Decirle al comando
que va a ejecutar una sentencia SQL
//3. No hay
parámetros
//4. El DataAdapter
que va a ejecutar el comando y
//es el encargado de
llena el DataTable
SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);
SqlDat.Fill(DtResultado);//Llenamos
el DataTable
}
catch
(Exception ex)
{
DtResultado = null;
}
return
DtResultado;
}
public DataTable
BuscarNombre(dCategoria Categoria)
{
DataTable DtResultado = new DataTable("categoria");
SqlConnection SqlCon = new SqlConnection();
try
{
//1. Establecer la
cadena de conexion
SqlCon.ConnectionString = Conexion.Cn;
//2. Establecer el
comando
SqlCommand
SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;//La
conexión que va a usar el comando
SqlCmd.CommandText = "spBuscar_Categoria_Nombre";//El
comando a ejecutar
SqlCmd.CommandType = CommandType.StoredProcedure;
//Decirle al comando
que va a ejecutar una sentencia SQL
//3.Enviamos el
parámetro de Búsqueda
SqlParameter
ParTextoBuscar = new SqlParameter();
ParTextoBuscar.ParameterName = "@textobuscar";
ParTextoBuscar.SqlDbType = SqlDbType.VarChar;
ParTextoBuscar.Size = 50;
ParTextoBuscar.Value =
Categoria.TextoBuscar;
SqlCmd.Parameters.Add(ParTextoBuscar);
//4. El DataAdapter que va a
ejecutar el comando y
//es el encargado de
llena el DataTable
SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);
SqlDat.Fill(DtResultado);//Llenamos
el DataTable
}
catch (Exception ex)
{
DtResultado = null;
}
return DtResultado;
}
}
}
Video 6: Sistema de Ventas C# - Visual Studio 2013 - Sql Server 2014 (6-34) Capa Datos Clase DCategoría
Saludos Imperio, un abrazo a la distancia!!!
Saludos Imperio, un abrazo a la distancia!!!
Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (6-41) Programación 3 capas Capa Datos Clase DCategoria
Reviewed by IncanatoIt-ad
on
14:03
Rating:
Tu videos son excelentes felicitaciones, tengo dos preguntas 1. - porque en todos tus desarrollos trabajas con capas de clases ? es más rápido o simplemente es un mayor orden, yo hacia todo dentro de los formularios y además creaba métodos públicos hasta que vi tus video.
ResponderEliminar2. - tu tampoco usas open source para conectar la base de datos. es una mal practica ? porque tú utilizas procedure de sql and class para conectar los datos.
Te agradecería tu respuesta
Gracias por tus comentarios amigo..también tengo dos respuestas (Coincidencia!) 1. Programar en capas mantiene una buena arquitectura y por tanto se tiene un orden ya que se separa la lógica del negocio, las interfaces y los datos, además es más seguro..así si se tiene que hacer algún cambio se aplica a la capa específica..y el código es más fácil de reutilizar, por ejemplo si tienes una clase con sus métodos, propiedades y atributos lo puedes llamar desde cualquier otra clase y utilizar dichos métodos, si no se hace esto seguro tienes una aplicación con código repetido por allá y por acá
Eliminar2. Yo envio parámetros desde mi aplicaci;on en C# y ejecuto ciertos procedimientos almacenados en el gestor de base de datos, es más seguro.
Gracias, espero sigas todos los cursos.
Hola Juan Carlos mi nombre es Yinet,me gustaria saber por favor que tengo qe hacer para solucionar el problema del video 8 en private void OcultarColumnas()
Eliminar{
this.dataListado.Columns[0].Visible = false;
this.dataListado.Columns[1].Visible = false;
}
mi correo es yini.yinesilla@gmail.com gracias de antemano por los cursos
Hola Juan Carlos! antetodo felicitarle por este gran tutorial. Estoy realizando el tutorial tanto por video como por aqui y me arroja este error con la variable DtResultado en el metodo BuscarNombre.
ResponderEliminar"Error 2 No se puede convertir implícitamente el tipo 'System.Data.DataTable' en 'string'"
Hola, tienes que llamar al método ocultar columnas pero cuando se tiene al menos una fila, esto revisalo en el método mostrar.
ResponderEliminarhola sera que puedo seguir el curso usando VS 2012 y Sql 2012.
ResponderEliminarSaludes
Porsupuesto puede utilizar esas versiones.
EliminarHola muy buenos tus videos, estoy haciéndolo a la par con el video pero me esta pasando que cuando edito me inserta tambien y no se que hice mal porque ya revise detenidamente y todo esta tal cual!
ResponderEliminar