UTArlingtonX: LINK5.10x Data, Analytics, and Learning
Como en un CookBook, tener y disponer de una clase para:
- Capa de Datos
- Capa de Entidades
- Capa de Reglas de Negocio
- Capa de Presentacion
- Servicios, como web services Primero en la capa de Datos
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace CapaDatos
{
internal class Conexion
{
private static string cadenaConexion = ConfigurationManager.ConnectionStrings["conexionSQL"].ConnectionString;;// definir
private static SqlConnection conex = new SqlConnection(cadenaConexion);
private static bool conectar()
{
try
{
conex.Open();
return true;
}
catch (Exception)
{
return false;
}
}
private static void desconectar()
{
conex.Close();
}
public static void EjecutarOperacion(string sentencia, List listaParametro, CommandType tipoComando)
{
if (conectar())
{
SqlCommand comando = new SqlCommand();
comando.CommandText= sentencia;
comando.CommandType = tipoComando;
comando.Connection = conex;
foreach (SqlParameter parametro in listaParametro)
{
comando.Parameters.Add(parametro);
}
comando.ExecuteNonQuery();
desconectar();
}
else
{
throw new Exception("hubo problema al conectarse a la base de datos");
}
}
public static DataTable EjecutarConsulta(string sentencia, List listaParametro, CommandType tipoComando)
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(sentencia, conex);
adapter.SelectCommand.CommandType = tipoComando;
foreach (SqlParameter parametro in listaParametro)
{
adapter.SelectCommand.Parameters.Add(parametro);
}
DataSet conjuntoDatos = new DataSet();
adapter.Fill(conjuntoDatos);
return conjuntoDatos.Tables[0];
}
}
}
}
****Adicionamente debemos de tener una clase Manejador de base de datos y Proyecto donde se definirán las Entidades que se definieron en nuestro proyecto:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ejercicio.AccesoDatos
{
public class ManejadorDatos
{
public static bool IniciarSesion(Entidades.Usuario objetoUsuario)
{
if (Conexion.EjecutarConsulta(string.Format("Select * from usuarios where usuario='{0}' and clave ={1}", objetoUsuario.Nombre, objetoUsuario.Clave ),
new List(),
System.Data.CommandType.Text).Rows.Count > 0)
{
return true;
}
else
{
return false;
}
}
public static void RegistrarUsuario(Ejercicio.Entidades.Usuario objetoUsuario)
{
List lista = new List();
SqlParameter nombre = new SqlParameter("@p_nombre", objetoUsuario.Nombre);
SqlParameter clave = new SqlParameter("@p_clave", objetoUsuario.Clave);
lista.Add(nombre);
lista.Add(clave);
Conexion.EjecutarOperacion("Registrarusuario", lista, System.Data.CommandType.StoredProcedure);
}
}
}
Otro proyecto seria la de entidades aca solo expondre una sola entidad donde es una tabla usuario que se llamaran los campos Usuario y clave
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ejercicio.Entidades
{
public class Usuario
{
private string nombre = string.Empty;
private string clave = string.Empty;
public string Nombre
{
get { return nombre; }
set { nombre = value; }
}
public string Clave
{
get { return clave; }
set { clave = value; }
}
}
}
CAPA DE REGLAS DE NEGOCIO
Se crea un proyecto con reglas de negocio y referenciar los componente de acceso a datos y demas
using Ejercicio.AccesoDatos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ejercicio.LogicaNegocio
{
public class AdministradorUsuarios
{
private static int i=0;
public static bool IniciarSesion(Entidades.Usuario objetoUsuario)
{
if (int.TryParse(objetoUsuario.Clave, out i))
{
return ManejadorDatos.IniciarSesion(objetoUsuario);
}
else
{
throw new Exception("formato de clave invalida");
}
}
public static void RegistrarUsuario(Ejercicio.Entidades.Usuario objetoUsuario)
{
ManejadorDatos.RegistrarUsuario(objetoUsuario);
}
}
}
CAPA DE PRESENTACION
Para un Aplicación Distribuida esta capa se debe realizar un servicio Web o un servicio WCF al que espondremos aca:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using Ejercicio.Entidades; using Ejercicio.LogicaNegocio; ////// Summary description for Operaciones /// [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class Operaciones : System.Web.Services.WebService { public Operaciones () { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public bool IniciarSesion(Usuario objetoUsuario) { return AdministradorUsuarios.IniciarSesion(objetoUsuario); } [WebMethod] public void RegistrarUsuario(Ejercicio.Entidades.Usuario objetoUsuario) { AdministradorUsuarios.RegistrarUsuario(objetoUsuario); } }
