none
Erro : System.IndexOutOfRangeException RRS feed

Respostas

  • Desculpe:


      public DTO.Login Logon(DTO.Login dados)
            {
                StringBuilder Query = new StringBuilder();
                Query.Append(" SELECT tb_usuario.id_user, tb_usuario.nome_user, ");
                Query.Append(" tb_usuario.login_user, tb_usuario.senha_user, tb_departamento.nome_dep");
                Query.Append(" FROM tb_usuario ");
                Query.Append(" INNER JOIN tb_departamento ");
                Query.Append(" ON tb_departamento.id_dep = tb_departamento.id_dep");
                Query.Append(" WHERE login_user = @login_user");
                Query.Append(" AND senha_user = @senha_user");
                
                using (SqlConnection con = new SqlConnection(cnx))
                {
                    try
                    {
                        con.Open();
                        using (SqlCommand cmd = pLogar(new SqlCommand(Query.ToString(), con), dados))
                        {
                            using (SqlDataReader dr = cmd.ExecuteReader())
                            {
                               if(dr.Read())
                                {
                                    DTO.Login dto = new DTO.Login();
                                    dto.id_user = Convert.ToInt32(dr["@id_user"].ToString());
                                    dto.nome_user = dr["@nome_user"].ToString();
                                    dto.login_user = dr["@login_user"].ToString();
                                    dto.senha_user = dr["@senha_user"].ToString();
                                    dto.nome_dep = dr["@nome_dep"].ToString();                                
    
                                    return dto;
                                }
                                else
                                {
                                    return new DTO.Login();
                                }
                            }                 
    
                        }        
                    }
                    catch(Exception)
                    {
                        throw;
                    }
                    finally
                    {
                        con.Close();
                    }
                }
            }
    
            private SqlCommand pLogar(SqlCommand cmd, DTO.Login dados)
            {
                cmd.Parameters.AddWithValue("@login_user", dados.login_user);
                cmd.Parameters.AddWithValue("@senha_user", dados.senha_user);
                return cmd;
            }



    Fernando Gomes

    • Marcado como Resposta fgoliveira quarta-feira, 27 de janeiro de 2016 01:34
    quarta-feira, 27 de janeiro de 2016 00:20
  • Fernando, tente tirar o @.

    Ele serve somente para os parâmetros.

    Como tu estás selecionando os campos da tabela, o arroba não é necessário (como falei anteriormente, é um erro de "parâmetro" que não existe na query).


    Att., Rafael Simor

    • Marcado como Resposta fgoliveira quarta-feira, 27 de janeiro de 2016 01:34
    quarta-feira, 27 de janeiro de 2016 00:23

Todas as Respostas

  • Boa noite.

    Ajudaria se tu nos mostrasse o código.

    Mas este erro normalmente ocorre quando tu tentas acessar um item pelo index em uma lista, porém este index não existe.

    No teu caso, parece ser um parâmetro de uma query. Verifique se o parâmetro existe na string da Query, lembrando que os parâmetros serão case sensitive.


    Att., Rafael Simor

    terça-feira, 26 de janeiro de 2016 01:01
  • Desculpe:


      public DTO.Login Logon(DTO.Login dados)
            {
                StringBuilder Query = new StringBuilder();
                Query.Append(" SELECT tb_usuario.id_user, tb_usuario.nome_user, ");
                Query.Append(" tb_usuario.login_user, tb_usuario.senha_user, tb_departamento.nome_dep");
                Query.Append(" FROM tb_usuario ");
                Query.Append(" INNER JOIN tb_departamento ");
                Query.Append(" ON tb_departamento.id_dep = tb_departamento.id_dep");
                Query.Append(" WHERE login_user = @login_user");
                Query.Append(" AND senha_user = @senha_user");
                
                using (SqlConnection con = new SqlConnection(cnx))
                {
                    try
                    {
                        con.Open();
                        using (SqlCommand cmd = pLogar(new SqlCommand(Query.ToString(), con), dados))
                        {
                            using (SqlDataReader dr = cmd.ExecuteReader())
                            {
                               if(dr.Read())
                                {
                                    DTO.Login dto = new DTO.Login();
                                    dto.id_user = Convert.ToInt32(dr["@id_user"].ToString());
                                    dto.nome_user = dr["@nome_user"].ToString();
                                    dto.login_user = dr["@login_user"].ToString();
                                    dto.senha_user = dr["@senha_user"].ToString();
                                    dto.nome_dep = dr["@nome_dep"].ToString();                                
    
                                    return dto;
                                }
                                else
                                {
                                    return new DTO.Login();
                                }
                            }                 
    
                        }        
                    }
                    catch(Exception)
                    {
                        throw;
                    }
                    finally
                    {
                        con.Close();
                    }
                }
            }
    
            private SqlCommand pLogar(SqlCommand cmd, DTO.Login dados)
            {
                cmd.Parameters.AddWithValue("@login_user", dados.login_user);
                cmd.Parameters.AddWithValue("@senha_user", dados.senha_user);
                return cmd;
            }



    Fernando Gomes

    • Marcado como Resposta fgoliveira quarta-feira, 27 de janeiro de 2016 01:34
    quarta-feira, 27 de janeiro de 2016 00:20
  • Fernando, tente tirar o @.

    Ele serve somente para os parâmetros.

    Como tu estás selecionando os campos da tabela, o arroba não é necessário (como falei anteriormente, é um erro de "parâmetro" que não existe na query).


    Att., Rafael Simor

    • Marcado como Resposta fgoliveira quarta-feira, 27 de janeiro de 2016 01:34
    quarta-feira, 27 de janeiro de 2016 00:23
  • Putz...

    Copilou.

    Vergonha de dizer isso, mais apenas o "@"e também dei uma ajustada na query referente ao id, não é necessário.

    Obrigado.


    Fernando Gomes

    quarta-feira, 27 de janeiro de 2016 01:34
  • Capaz, Fernando.

    Não precisa ter vergonha...

    Esses pequenos erros de atenção acontecem toda hora. Quando uma pessoa vê o problema "de fora" normalmente é mais fácil notar o que está errado (principalmente quando é um detalhezinho desses).

    E, no fim das contas, estamos aqui para ajudar \o/


    Att., Rafael Simor

    quarta-feira, 27 de janeiro de 2016 02:05