Un login desarrollado en 3 capas (entidad, datos y negocios) y con base de datos.
Creamos nuestra base de datos BDLogin con la tabla TableLogin (usuario1 y password1) y nuestro procedimiento sp_login con los parámetros @usu y @pas.
Create Database BDLogin Go Create table TableLogin ( usuario1 varchar(50), password1 varchar(50) ) Go create proc sp_login @usu varchar(50), @pas varchar(50) as select * from TableLogin where usuario1=@usu and password1=@pas Go Insert into TableLogin values('paul','paul123') Insert into TableLogin values('VaidrollTeam','VaidrollTeam123') select * from TableLogin
Capa entidad
En nuestro procedimiento almacenado hay 2 parámetros (@usu y @pas) en la capa entidad también debe tener 2 (usu1 y pas1), de esta manera se podrá comprobar el usuario y contraseña del formulario a la base de datos.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ClassLibrary_E { public class Class1 { public String usu1 { get; set; } public String pas1 { get; set; } } }
Capa datos
Referencia a la capa entidad, System.Configuration, System.Data.SqlClient y System.Data. estas referencias son necesarias para realizar la conexión y traer el procedimiento almacenado del SQL Server.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Configuration; using System.Data.SqlClient; using System.Data; namespace ClassLibrary_D { public class Class1 { SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["sql"].ConnectionString); public DataTable D_Login(ClassLibrary_E.Class1 obje) { SqlCommand cmd = new SqlCommand("sp_login", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@usu", obje.usu1); cmd.Parameters.AddWithValue("@pas", obje.pas1); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dtable1 = new DataTable(); da.Fill(dtable1); return dtable1; } } }
Capa negocios
Referencia a la capa datos, entidad e invocamos a la función D_Login que anteriormente fue creado.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; namespace ClassLibrary_N { public class Class1 { ClassLibrary_D.Class1 objd = new ClassLibrary_D.Class1(); public DataTable N_login(ClassLibrary_E.Class1 obje) { return objd.D_Login(obje); } } }
Formulario principal
Referencia a la capa entidad y negocios, el texto ingresado en los TextBox usuario y contraseña harán uso de los valores creados en capa entidad usu1 y pas1 para comprobar si existe alguna coincidencia con los datos de la tabla TableLogin, si hay una coincidencia permitirá pasar al usuario y se abrirá el formulario secundario.
No te olvides de crear el formulario secundario para que se muestre luego de iniciar sesión.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { ClassLibrary_E.Class1 obje = new ClassLibrary_E.Class1(); ClassLibrary_N.Class1 objn = new ClassLibrary_N.Class1(); public Form1() { InitializeComponent(); } private void btnsalir_Click(object sender, EventArgs e) { this.Close(); } private void btningresar_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); obje.usu1 = txtusuario.Text; obje.pas1 = txtpassword.Text; dt = objn.N_login(obje); if (dt.Rows.Count > 0) { obje.usu1 = dt.Rows[0][0].ToString(); obje.pas1 = dt.Rows[0][1].ToString(); MessageBox.Show("Bienvenido " + obje.usu1, "Mensaje"); Principal pri = new Principal(); pri.Show(); txtusuario.Text = ""; txtpassword.Text = ""; } else { MessageBox.Show("Error","Mensaje"); } } } }
App config
Realizamos la conexión con la base de datos. ¡Recuerda! 👀el nombre del servidor configurado en mi equipo es "localhost\SQLEXPRESS" el tuyo tal vez sea localhost,localhost\"Nombre de tu equipo", eso revisa al abrir el SQL Server.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="sql" connectionString="server=localhost\SQLEXPRESS; integrated security=true;database=BDLogin"/> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> </configuration>
Posibles errores.
System.ArgumentException
System.Data.SqlClient.SqlException
Si te sale alguno de estos errores es porque no hay conexión con tu base de datos o porque esta mal escrito el nombre del procedimiento o parámetros.
Aquí tienes el vídeo para que puedas ver como se hace paso a paso.