none
Dúvida ao puxar informações do BD SQL Server e guardar em variaveis RRS feed

  • Pergunta

  • Olá, estou fazendo um sistema de Login para a aplicação. Consegui fazer todo o processo, só que eu gostaria que cada usuário tivesse seu próprio nível dentro do sistema.

    Segue o código que fiz para a função Logar():

    public void Logar()
    {
         objConnection = new SqlConnection(connectionString);
         string usu;
         string pass;
         int tipo_usu;
    
         string strSQL = "SELECT COUNT(idUsuario) FROM usuarios WHERE usuario = @usuario AND senha = @senha";
    
         try
         {
              usu = txtbUsuario.Text;
              pass = txtbSenha.Text;
    
              SqlCommand objCommand = new SqlCommand(strSQL, objConnection);
    
              objCommand.Parameters.Add("@usuario", SqlDbType.VarChar).Value = usu;
              objCommand.Parameters.Add("@senha", SqlDbType.VarChar).Value = pass;
    
              objConnection.Open();
    
              int v = (int)objCommand.ExecuteScalar();
    
              if (v > 0)
              {
                   logado = true;
                   this.Dispose();
              }
              else
              {
                   MessageBox.Show("Usuário ou senha incorretos.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                   logado = false;
              }
    
         objConnection.Close();
         }
         catch(SqlException erro)
         {
              MessageBox.Show(erro + " \n\nNo banco", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
    }


    Tenho a seguinte tabela dentro do banco:

    idUsuario
    usuario
    senha
    email
    tipoUsuario

    Eu precisava pegar o tipoUsuario e salvar em uma variável (no caso a tipo_usu), pois posso utilizar futuramente na aplicação.

    Agradeço qualquer tipo de ajuda e orientação. :)

    sexta-feira, 14 de agosto de 2015 14:04

Respostas

  • Eu suo um classe  DadosLogin .

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.Sql;
    using System.Data.SqlClient;
    using HRIO.Code.DTO;
    
    namespace HRIO.Code.DTO
    {
        class DadosLogin
        {
            private static int id;
    
            public int Id
            {
                get { return id; }
                set { id = value; }
            }
    
            private static string nivelacesso; // Nivel de acesso
    
            public string Nivelacesso
            {
                get { return nivelacesso; }
                set { nivelacesso = value; }
            }
           
            private static string nomeusuario;
    
            public string Nomeusuario
            {
                get { return nomeusuario; }
                set { nomeusuario = value; }
            }
    
            private static int idempresa;
    
            public int Idempresa
            {
                get { return idempresa; }
                set { idempresa = value; }
            }
    
            private static string emp;
    
            public string Emp
            {
                get { return emp; }
                set { emp = value; }
            }
        }
    }
    

    ai no meu form principal chamo essa classe assim tenho acesso direto ao dados que preciso tipo nome do usuario e qual nivel de acesso dele.

    using System.Drawing.Imaging;
    using Microsoft.VisualBasic;
    using HRIO.Code.DTO; // AQUI  
    
    namespace HRIO
    {
        public partial class Frm_Principal : Form
        {
            SqlConnection con;
            DadosLogin dton = new DadosLogin(); // CLASSE
    
            public Frm_Principal(string niAcess)
            {
                InitializeComponent();
                label1.Text = niAcess;
                this.WindowState = FormWindowState.Maximized;
            }
    
            private void Frm_Principal_Load(object sender, EventArgs e)
            {
                label1.Visible = false;
                string nome = dton.Nomeusuario;
                int idempre = dton.Idempresa;
                string nivacesse = dton.Nivelacesso;
                toolsl1.Text = nome;
               
    
                switch (label1.Text)
                {
                    case "usuario": // caso o nivel seja de usurio carrega esses itens do menu
                        
                        this.aerToolStripMenuItem.Visible = true;
                        this.sairToolStripMenuItem.Visible = true;
                        this.cadUsuáriosToolStripMenuItem.Visible = false;
                        this.emailToolStripMenuItem.Visible = false;
                        this.bancosToolStripMenuItem.Visible = false;
                        this.fabricantesToolStripMenuItem.Visible = true;
                        
     case "Diretoria": // se for diretoria carrega esses
    
                        this.aerToolStripMenuItem.Visible = true;
                        this.sairToolStripMenuItem.Visible = true;
                        this.cadUsuáriosToolStripMenuItem.Visible = true;
                        this.emailToolStripMenuItem.Visible = true;
                        this.bancosToolStripMenuItem.Visible = true;
    
    }
    

    Espero ter ajudado.

    att, wsti,

    • Marcado como Resposta Marcos SJ sexta-feira, 14 de agosto de 2015 15:01
    • Não Marcado como Resposta NouRuem sexta-feira, 14 de agosto de 2015 20:24
    • Marcado como Resposta NouRuem sexta-feira, 14 de agosto de 2015 20:24
    sexta-feira, 14 de agosto de 2015 14:25

Todas as Respostas

  • Eu suo um classe  DadosLogin .

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.Sql;
    using System.Data.SqlClient;
    using HRIO.Code.DTO;
    
    namespace HRIO.Code.DTO
    {
        class DadosLogin
        {
            private static int id;
    
            public int Id
            {
                get { return id; }
                set { id = value; }
            }
    
            private static string nivelacesso; // Nivel de acesso
    
            public string Nivelacesso
            {
                get { return nivelacesso; }
                set { nivelacesso = value; }
            }
           
            private static string nomeusuario;
    
            public string Nomeusuario
            {
                get { return nomeusuario; }
                set { nomeusuario = value; }
            }
    
            private static int idempresa;
    
            public int Idempresa
            {
                get { return idempresa; }
                set { idempresa = value; }
            }
    
            private static string emp;
    
            public string Emp
            {
                get { return emp; }
                set { emp = value; }
            }
        }
    }
    

    ai no meu form principal chamo essa classe assim tenho acesso direto ao dados que preciso tipo nome do usuario e qual nivel de acesso dele.

    using System.Drawing.Imaging;
    using Microsoft.VisualBasic;
    using HRIO.Code.DTO; // AQUI  
    
    namespace HRIO
    {
        public partial class Frm_Principal : Form
        {
            SqlConnection con;
            DadosLogin dton = new DadosLogin(); // CLASSE
    
            public Frm_Principal(string niAcess)
            {
                InitializeComponent();
                label1.Text = niAcess;
                this.WindowState = FormWindowState.Maximized;
            }
    
            private void Frm_Principal_Load(object sender, EventArgs e)
            {
                label1.Visible = false;
                string nome = dton.Nomeusuario;
                int idempre = dton.Idempresa;
                string nivacesse = dton.Nivelacesso;
                toolsl1.Text = nome;
               
    
                switch (label1.Text)
                {
                    case "usuario": // caso o nivel seja de usurio carrega esses itens do menu
                        
                        this.aerToolStripMenuItem.Visible = true;
                        this.sairToolStripMenuItem.Visible = true;
                        this.cadUsuáriosToolStripMenuItem.Visible = false;
                        this.emailToolStripMenuItem.Visible = false;
                        this.bancosToolStripMenuItem.Visible = false;
                        this.fabricantesToolStripMenuItem.Visible = true;
                        
     case "Diretoria": // se for diretoria carrega esses
    
                        this.aerToolStripMenuItem.Visible = true;
                        this.sairToolStripMenuItem.Visible = true;
                        this.cadUsuáriosToolStripMenuItem.Visible = true;
                        this.emailToolStripMenuItem.Visible = true;
                        this.bancosToolStripMenuItem.Visible = true;
    
    }
    

    Espero ter ajudado.

    att, wsti,

    • Marcado como Resposta Marcos SJ sexta-feira, 14 de agosto de 2015 15:01
    • Não Marcado como Resposta NouRuem sexta-feira, 14 de agosto de 2015 20:24
    • Marcado como Resposta NouRuem sexta-feira, 14 de agosto de 2015 20:24
    sexta-feira, 14 de agosto de 2015 14:25
  • Me desculpe, mas não entendi.

    Segundo esse código que você fez, ele não esta se conectando a um BD, certo? Eu consegui fazer a conexão normal ao BD, a dúvida seria de pegar a informação do BD e salvar em um variável.

    De qualquer forma, agradeço a atenção. :)

    sexta-feira, 14 de agosto de 2015 20:27
  • NouRuem, a conexão com seu banco vc deve fazer, a classe ira pegar os campos da sua tabela. A diferença que existe é vc hj tem uma conexão e compara se o Nome do usuario cadastrado no banco é fulano e a senha abc123, ele te retorna o usuario existe e a senha confere. certo. o que essa classe faz é manter os dados persistentes.

    Vc ja criou a classe no projeto, e refernciou ela no seu formPrincipal certo.

    pega o seu form de Login e faz como esta abaixo.

    using System.Data.SqlClient;
    using HRIO.Code.DTO;
    
    namespace HRIO
    {
        public partial class Frm_Login : Form
        {
            SqlConnection sqlconn = null;
    
         //   private string strconn = @"Data Source=RJ-PC\SQLEXPRESS;Initial Catalog=hrio;Integrated Security=True";
            private string _Sql = string.Empty;
            public string NivelAcesso = "";
    
            DadosLogin dto = new DadosLogin();
    
            public Frm_Login()
            {
                InitializeComponent();
                txbNivel.Visible = false;
                lblNivel.Visible = false;
            }
    
            public void logar()
            {//abro a conexão com o sql, verifico se usu e pwd são validos executo a leitura carrego o nivelde acesso e jogo no form principal.
                sqlconn = new SqlConnection(strconn);
                string usu, pwd;
                string nivel = "";
                string nomeusuario = "";
                string idusu = "";
                try
                {
                    usu = txbUsuario.Text.Trim();
                    pwd = txbSenha.Text.Trim();
                    _Sql = "SELECT * FROM tbl_Login WHERE Usuario = @Usuario AND Senha = @Senha";
                    SqlCommand cmd = new SqlCommand(_Sql, sqlconn);
                    cmd.Parameters.Add("@Usuario", SqlDbType.VarChar).Value = usu;
                    cmd.Parameters.Add("@Senha", SqlDbType.VarChar).Value = pwd;
                    sqlconn.Open();
                    SqlDataReader dr = null;
                    dr = cmd.ExecuteReader();
                    if (dr.Read())
                    {
                        this.Hide();
                        idusu = dr[0].ToString();
                        nivel = dr[3].ToString();
                        nomeusuario = dr[5].ToString();
                    }
                    if (nivel != "")
                    {
                       // aqui eu leio minha tabela e passo para a classe as informações.
                        NivelAcesso = nivel;
                        dto.Id = Convert.ToInt32(idusu);
                        dto.Nomeusuario = nomeusuario;
                        dto.Nivelacesso = nivel;
                        txbNivel.Text = NivelAcesso;
                        Frm_Principal frg = new Frm_Principal(txbNivel.Text);
                        frg.ShowDialog();
                        sqlconn.Close();
                    }
                    else
                    {
                        MessageBox.Show("Login ou Senha Invalidos !");
                        sqlconn.Close();
                        foreach (Control ctrl in groupBox1.Controls)
                        {
                            if (ctrl is TextBox)
                            {
                                ((TextBox)ctrl).Clear();
                            }
                        }
                    }
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex + "erro no banco");
                }
            }
    Att, wsti.

    sexta-feira, 14 de agosto de 2015 21:25
  • Eu não entendi a parte do DadosLogin dto = new DadosLogin(), não possuo essa classe no meu programa.

    Já possuo formLogin com o seguinte código:

    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Projeto
    {
        public partial class FrmLogin : Form
        {
            // String de conexão com o BD SQL Server.
            string connectionString = @"xxxxxxxxxxxxxxxx";
    
            SqlConnection objConnection = null;
    
            public bool logado = false;
    
            public FrmLogin()
            {
                InitializeComponent();
    
                this.Text = "Login";
                txtbUsuario.Select();
            }
    
            // Sai da aplicação.
            private void btnSair_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            // Faz a verificação no BD se a senha e o usuário correspondem.
            public void Logar()
            {
                objConnection = new SqlConnection(connectionString);
                string usu;
                string pass;
                int tipo_usu;
    
                string strSQL = "SELECT COUNT(idUsuario) FROM usuarios WHERE usuario = @usuario AND senha = @senha";
    
                try
                {
                    usu = txtbUsuario.Text;
                    pass = txtbSenha.Text;
    
                    SqlCommand objCommand = new SqlCommand(strSQL, objConnection);
    
                    objCommand.Parameters.Add("@usuario", SqlDbType.VarChar).Value = usu;
                    objCommand.Parameters.Add("@senha", SqlDbType.VarChar).Value = pass;
    
                    objConnection.Open();
    
                    int v = (int)objCommand.ExecuteScalar();
    
                    if (v > 0)
                    {
                        logado = true;
                        this.Dispose();
                    }
                    else
                    {
                        MessageBox.Show("Usuário ou senha incorretos.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        logado = false;
                    }
    
                    objConnection.Close();
                }
                catch(SqlException erro)
                {
                    MessageBox.Show(erro + " \n\nNo banco", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    
            // Ao clicar no botão Entrar, ele chama a função Logar.
            private void btnEntrar_Click(object sender, EventArgs e)
            {
                Logar();
            }
    
            // Se a tecla Enter for pressionada, ele chama a funcção Logar.
            private void txtbSenha_KeyUp(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                    Logar();
                }
            }
    
            // Servirá para recuperar a senha através de um e-mail.
            private void btnAjuda_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Em desenvolvimento.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
    }

    O programa já abre o form de Login em primeiro momento, somente depois da validação ele deixa o usuário usar as funções do programa.

    quarta-feira, 26 de agosto de 2015 20:24