none
Salvar senha banco de dados RRS feed

  • Pergunta

  • Pessoal,

    seguinte andei pesquisando sobre como salvar login e senha no banco de dados, utilizo SQL 2008 e c#. como disse depois de pesquisar vi que poderia usar no sql um campo senha do tipo varbinary(10). O problema é que quando tento salvar a informação de um textBox que é string nesse campo aparece o erro abaixo

    Implicit conversion from data type nvarchar to varbinary is not allowed. Use the CONVERT function to run this query.

     

    esse é meu codigo:


                        comm.CommandText = "INSERT INTO usuario (login, senha, dica) VALUES (@login, @senha, @dica)";

                        comm.Parameters.AddWithValue("@login", getLogin());
                        comm.Parameters.AddWithValue("@Senha", getSenha()); //o que devo utilizar para conversão?
                        comm.Parameters.AddWithValue("@dica", getDica());

                        try //tenta abrir a conexao com o banco de dados
                        {
                            conn.Open();
                            comm.ExecuteNonQuery();  // o erro ocorre aqui
                            conn.Close();

                         {

     

     

    seria essa a melhor maneira de se armazenar uma campo do tipo senha?

     

    desde já obrigado

    domingo, 27 de novembro de 2011 01:25

Respostas

Todas as Respostas

  • Qual o tipo de retorno de getSenha()?
    domingo, 27 de novembro de 2011 01:34
  • é um string

    exemplo "123"

    domingo, 27 de novembro de 2011 01:51
  • Tente:

    comm.Parameters.Add("@Senha", SqlDbType.VarChar).Value = getSenha();
    

    Eu recomendo sempre usar o Parameters.Add


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    domingo, 27 de novembro de 2011 02:10
  • apresentou o mesmo erro

    Implicit conversion from data type nvarchar to varbinary is not allowed. Use the CONVERT function to run this query.

    alterei a linha

     
    comm.Parameters.Add("@Senha", SqlDbType.VarChar).Value = getSenha();

    para

    comm.Parameters.Add("@Senha", SqlDbType.Varbinary).Value = getSenha();

     

    apresentou erro informando que não era possibel converter string para Byte[]

    tentei isso

    comm.Parameters.Add("@Senha", SqlDbType.VarChar).Value = Convert.ToByte(getSenha());

    apresentou erro informando que não era possibel converter Byte para Byte[]

     

    domingo, 27 de novembro de 2011 02:42
  • Tente modificar sua instrução SQL para utilizar o CAST para que seja convertido.

     

     comm.CommandText = "INSERT INTO usuario (login, senha, dica) VALUES (@login,  CAST(@senha AS VARBINARY(10)), @dica)";
    

     


    Para ler depois de gravado basta realizar o CAST para Varchar.

     

    SELECT CAST(senha AS VARCHAR(10))
    


     

     


    (Se a resposta ajudou, marque como útil)
    • Editado Wilian NS domingo, 27 de novembro de 2011 11:09 .
    domingo, 27 de novembro de 2011 11:08
  • Por que você grava a senha em um campo varbinary? É isto mesmo que você quer?

    Pelo que vejo você precisa alterar o tipo de campo na sua tabela. No caso alterar para varchar.


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    domingo, 27 de novembro de 2011 11:11
  • Knupp,

    Parece que o tipo de sua coluna foi criado errado, mude-o para varchar ao invés de varbinary.
    O varbinary serve para dados binários e o varchar para texto.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    domingo, 27 de novembro de 2011 12:43
  • Tenta assim!
    namespace UIWindows
    {
        public partial class Frm_Login : Form
        {
            public Frm_Login()
            {
                InitializeComponent();
                CarregarLogin();
            }
            private void CarregarLogin()
            {
                FuncionariosBLL obj = new FuncionariosBLL();
                comboTCCBox_Login.DataSource = obj.Listagem(string.Empty);
                comboTCCBox_Login.DisplayMember = "login";
                comboTCCBox_Login.ValueMember = "id_func";
            }
            private void button_Entrar_Click(object sender, EventArgs e)
            {
                int num = 50;
                while (progressbar_Login.Value < 100)
                {
                    progressbar_Login.Value = (num++);
                }
                SqlConnection conn = new SqlConnection("Data Source=NOME-PC;Initial Catalog=BancodeDados;Integrated Security=True");
                SqlCommand comm = new SqlCommand("Select * From Funcionarios Where login = @login and senha = @senha", conn);
                comm.Parameters.Add("@login", SqlDbType.VarChar).Value = comboTCCBox_Login.Text;
                comm.Parameters.Add("@senha", SqlDbType.VarChar).Value = textTCCBox_Senha.Text;
                conn.Open();
                int i = (int)comm.ExecuteScalar();
                conn.Close();
                // Se i for maior que zero é porque achou o usuario/senha, senao não acho
                if (i > 0)
                    MessageBox.Show("Ok");//colocar frm_principal
                else
                    MessageBox.Show("Usuario ou Senha incorretos");
            }
            private void button_Cancelar_Click(object sender, EventArgs e)
            {
                this.Close();
            }
            private void comboTCCBox_Login_SelectedIndexChanged(object sender, EventArgs e)
            {
            }
        }
    }

    quarta-feira, 30 de novembro de 2011 04:27