LOGIN (BÁSICO Y CON PERMISOS) EN C# + SQL SERVER - VISUAL STUDIO 2019


Un login sencillo y con permisos de acuerdo al tipo de usuario, desarrollado en 3 capas (datos, entidad, y negocio) con diseño hecho en Photoshop CS6 y cuenta con su propia base de datos.

Base de datos y procedimiento almacenado

Creamos nuestra base de datos TutoVaiLogin, una tabla Usuario con los campos necesarios, el id_area permitirá brindar los permisos a los usuarios.
Creamos el procedimiento sp_logueo_ez para iniciar sesión.

Create database TutoVaiLogin
go

use TutoVaiLogin
go

create table Usuario
(
id_area varchar(5),
id_empleado varchar(5),
nombre varchar(50),
usuario varchar(10),
contraseña varchar(10)
);

insert into Usuario values('A0001','E0001','VaidrollTeam','Adm','Adm')
insert into Usuario values('A0002','E0002','Paul Romero Sanchez','Pa01','1234')
insert into Usuario values('A0003','E0003','Christian Rik Flores','Riki01','riki')

create proc sp_logueo_ez
@usuario varchar(10),
@clave varchar(10)
as
select id_area,nombre,usuario,contraseña from Usuario 
where usuario=@usuario and contraseña=@clave
go

Capa entidad

En nuestro procedimiento almacenado hay 2 parámetros usuario y clave, entonces creamos dos datos para enviar.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Capa_Entidad
{
    public class E_Users
    {

        public String usuario { get; set; }

        public String clave { get; set; }
    }
}

Capa datos

Realizamos la referencia a la capa entidad, system.configuration, la conexión y hacemos uso del procedimiento almacenado sp_logueo_ez.

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Configuration;
using System.Data;
using Capa_Entidad;

namespace Capa_Datos
{
    public class D_Users
    {

        SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["sql"].ConnectionString);

        public DataTable D_user(E_Users obje) 
        {

            SqlCommand cmd = new SqlCommand("sp_logueo_ez", cn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@usuario", obje.usuario);
            cmd.Parameters.AddWithValue("@clave", obje.clave);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }

    }
}

Capa Negocio 

Referencia a la capa datos, entidad y llamar a la función ya creada en la anterior capa.

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Capa_Datos;
using Capa_Entidad;

namespace Capa_Negocio
{
    public class N_Users
    {

        D_Users objd = new D_Users();

        public DataTable N_user(E_Users obje) 
        {
            return objd.D_user(obje);
        }

    }
}

Formulario principal (Login)

Referencia a la capa entidad y negocio, si logra encontrar al usuario ingresado abrirá el siguiente formulario, caso contrario le saldrá un mensaje de error.

En una variable compartida se almacenará el id_area del usuario y el nombre para que se haga uso en el siguiente formulario.

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;

using Capa_Entidad;
using Capa_Negocio;

namespace WindowsFormsApp1
{
    public partial class Login : Form
    {

        E_Users objeuser = new E_Users();
        N_Users objnuser = new N_Users();
        Principal frm1 = new Principal();

        public static string usuario_nombre;
        public static string area;


        void p_logueo() 
        {

            DataTable dt = new DataTable();
            objeuser.usuario = txtusuario.Text;
            objeuser.clave = txtpass.Text;

            dt = objnuser.N_user(objeuser);

            if (dt.Rows.Count > 0)
            {
                MessageBox.Show("Bienvenido " + dt.Rows[0][1].ToString(), "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                usuario_nombre = dt.Rows[0][1].ToString();
                area = dt.Rows[0][0].ToString();

                frm1.ShowDialog();

                Login login = new Login();
                login.ShowDialog();

                if (login.DialogResult == DialogResult.OK)
                    Application.Run(new Principal());

                txtusuario.Clear();
                txtpass.Clear();


            }
            else 
            {
                MessageBox.Show("Usuario o Contraseña Incorrecta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }


        public Login()
        {
            InitializeComponent();
        }

        private void Login_Load(object sender, EventArgs e)
        {
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            p_logueo();
        }

        private void btncancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

Formulario secundario

Hace uso el id_area enviado desde el otro formulario y por medio de condiciones se le brindará los permisos necesarios, además de mostrar el nombre del usuario ingresado.

Por ejemplo: 

Si el usuario tiene el id_area = "A0001" tendrá habilitado todo los botones entonces será considerado administrador.

Si el usuario tiene el id_area = "A0002" tendrá habilitado solo un par de botones entonces el usuario solo podrá presionar determinados botones de acuerdo a su área de trabajo.

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 Principal : Form
    {
        public Principal()
        {
            InitializeComponent();
        }

        private void Principal_Load(object sender, EventArgs e)
        {
            //admin
            if (Login.area == "A0001") 
            
            {
                btnalmacen.Enabled = true;
                btnventas.Enabled = true;
                btncompras.Enabled = true;

                lblCargo.Text = "Administrador";
            }

            //Ventas
            else if (Login.area == "A0002")

            {
                btnalmacen.Enabled = false;
                btnventas.Enabled = true;
                btncompras.Enabled = false;

                lblCargo.Text = "Ventas";
            }
            //Compras
            else if (Login.area == "A0003")

            {
                btnalmacen.Enabled = false;
                btnventas.Enabled = false;
                btncompras.Enabled = true;

                lblCargo.Text = "Compras";
            }

            lblnombre.Text = Login.usuario_nombre;
            timer1.Start();

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            lblfecha.Text = DateTime.Now.ToString("dd-MM-yyyy");
            lblhora.Text = DateTime.Now.ToString("hh:mm:ss tt");
        }
    }
}

App config

No te olvides de configurar el nombre del servidor.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>

  <connectionStrings>
    <add name="sql" connectionString="server=localhost\SQLEXPRESS;integrated security=true;database=TutoVaiLogin"/>
  </connectionStrings>
  
  
</configuration>







  • Visual Studio 2019
  • Photoshop CS6
  • Microsoft SQL Server Management Studio 18


  • Nombre          : LoginMenu.rar
  • Tamaño          : 489 KB