Implementación de inicio de sesión en WinForm con sistema de permisos y transferencia de userId al formulario principal

Proceso de autenticación en aplicación WinForms

El siguiente ejemplo demuestra un sistema de autenticación básico donde el identificador de usuario se transfiere entre formularios mediante la propiedad Tag.

1. Lógica del botón de inicio de sesión

La función principal valida las credenciales y, si son correctas, transfiree el ID del usuario al formulario principal.

private void BtnIngresar_Click(object sender, EventArgs e)
{
    // Obtener datos de entrada
    string usuario = CajaTextoUsuario.Text.Trim();
    string clave = CajaTextoClave.Text.Trim();
    
    // Validar campos obligatorios
    if (string.IsNullOrWhiteSpace(usuario))
    {
        MostrarAdvertencia("El campo usuario es requerido");
        CajaTextoUsuario.Focus();
        return;
    }
    
    if (string.IsNullOrWhiteSpace(clave))
    {
        MostrarAdvertencia("El campo contraseña es requerido");
        CajaTextoClave.Focus();
        return;
    }
    
    // Preparar modelo de datos
    var credenciales = new ModeloAutenticacion
    {
        NombreUsuario = usuario,
        Contrasena = clave
    };
    
    // Ejecutar verificación en base de datos
    var gestorUsuarios = new GestorDatosUsuario();
    int idEncontrado = gestorUsuarios.VerificarCredenciales(credenciales);
    
    // Evaluar resultado de autenticación
    if (idEncontrado > 0)
    {
        MostrarExito("Acceso concedido");
        
        // Configurar y mostrar ventana principal
        var ventanaPrincipal = new VentanaPrincipal();
        ventanaPrincipal.Tag = idEncontrado;
        ventanaPrincipal.WindowState = FormWindowState.Maximized;
        ventanaPrincipal.Show();
        this.Hide();
    }
    else
    {
        MostrarError("Credenciales inválidas");
    }
}

2. Capa de acceso a datos

La consulta SQL verifica la existencia del usuario con las credenciales proporcionadas.

public int VerificarCredenciales(ModeloAutenticacion datos)
{
    string consultaSQL = @"SELECT Identificador 
                          FROM UsuariosSistema 
                          WHERE Nombre=@Nombre AND Contraseña=@Clave";
    
    var parametros = new SqlParameter[]
    {
        new SqlParameter("@Nombre", datos.NombreUsuario),
        new SqlParameter("@Clave", datos.Contrasena)
    };
    
    object resultado = AccesoBD.EjecutarEscalar(consultaSQL, CommandType.Text, parametros);
    
    if (resultado != null && int.TryParse(resultado.ToString(), out int id))
    {
        return id;
    }
    
    return 0;
}

3. Clase de acceso a base de datos

El método genérico ejecuta consultas que retornan un único valor escalar.

public static object EjecutarEscalar(string consulta, CommandType tipo, params SqlParameter[] parametros)
{
    using (var conexion = new SqlConnection(CadenaConexion))
    {
        using (var comando = new SqlCommand(consulta, conexion))
        {
            comando.CommandType = tipo;
            
            if (parametros != null)
            {
                comando.Parameters.AddRange(parametros);
            }
            
            conexion.Open();
            object escalar = comando.ExecuteScalar();
            
            return escalar == DBNull.Value ? null : escalar;
        }
    }
}

Etiquetas: WinForms C# SQL Server autenticación Acceso a Datos

Publicado el 6-11 00:50