none
Ajuda com objeto Session mais SQL RRS feed

  • Pergunta

  • Olá a todos.
    Bom estou a fazer algo para min bem complicado.
    Estou desenvolvendo um sistema de abertura de chamados para emrpresa, não tenho experiência com asp.net e c#, mas manjo um pouco.

    O que desejo é criar uma pagina onde o usuário é capaz de abrir seu próprio chamado, criei apenas um dropdownlist com os tipos de chamado, "Assuntos", e outro com um campo texto Descrição.

    Quero pegar a data, o usuário que logou previamente e o ID do chamado e vincular em outra pagina, que será aberta com um gridview contendo estes dados tabulados. Assim a pessoa que for resolver o chamado, clica em cima de um deles e vai para outra pagina onde os campos são os mesmo da anterior, só que com um campo texto a mais, o da resposta e, um botão de finalizar, onde ele mata aquela sessão.

    Bom, complicado, pois estes objetos ao meu ver devem ser gravados no banco.

    Preciso muito de alguma juda, qualquer orientação me ajudaria muito.
    Obrigado.
    quinta-feira, 18 de fevereiro de 2010 12:19

Respostas

  • mude essa linha

    bool resultSelect = dr.HasRows; 

    Américo Arvani MCP/MCTS - WEB
    • Marcado como Resposta Maciel Alves quinta-feira, 18 de fevereiro de 2010 18:13
    • Não Marcado como Resposta Maciel Alves quinta-feira, 18 de fevereiro de 2010 18:16
    • Marcado como Resposta Maciel Alves quinta-feira, 18 de fevereiro de 2010 18:19
    quinta-feira, 18 de fevereiro de 2010 18:07
  •  bool resultSelect = dr.HasRows;
            if (resultSelect)
            {
                 while (dr.Read())
                    {
                        switch (dropLogin.SelectedValue)
                        {
                            case 1://Caso seja administrado
                                Session["ID_USER"] = dr["ID_USER"].GetType();
                                Session["ID_EMPRESA"] = dr["ID_EMPRESA"].GetType();
                                Session["NOME"] = dr["NOME"].ToString();
                                Session["SENHA"] = txtSenha.Text; //Por que armazenar a senha?
                                Session["USUARIO"] = txtUser.Text; //Você precisa dessa linha?
                                lblTESTE.Text = "Deu certo " + Session["NOME"].ToString();
                            break;
    
                            case 2://Caso seja analista
                                Session["ID_USER"] = dr["ID_USER"].GetType();
                                Session["ID_EMPRESA"] = dr["ID_EMPRESA"].GetType();
                                Session["NOME"] = dr["NOME"].ToString();
                                Session["SENHA"] = txtSenha.Text; //Por que armazenar a senha?
                                Session["USUARIO"] = txtUser.Text; //Você precisa dessa linha?
                                lblTESTE.Text = "Deu certo " + Session["NOME"].ToString();
                            break;
                        }
                    
                    }                        
                         
    
    
            }
            else
            {          
                lblTESTE.Text = "INCORRETO";
            }

    Américo Arvani MCP/MCTS - WEB
    • Marcado como Resposta Maciel Alves quinta-feira, 18 de fevereiro de 2010 19:31
    quinta-feira, 18 de fevereiro de 2010 19:24
  • Você agora idêntificou quem é seu usuário e guardou isso em uma sessão para ser recuperada na consulta SQL da gridview por exemplo , na proxima pagina você faz a consulta SQL com o SESSION["cod_usuario"].toString() na consulta do WHERE do SQL.

    Se ajudou marque como resposta.


    Américo Arvani MCP/MCTS - WEB
    • Marcado como Resposta Maciel Alves quinta-feira, 18 de fevereiro de 2010 18:25
    quinta-feira, 18 de fevereiro de 2010 18:23

Todas as Respostas

  • Olá, Maciel

    http://www.macoratti.net/aspn_pvw.htm
    Américo Arvani MCP/MCTS - WEB
    quinta-feira, 18 de fevereiro de 2010 13:20
  • Agradeço Américo, mas a coisa é mais em baixo.

    Olha só, as dúvidas são muitas, por exemplo. Da uma olhada nesta parte de código que você mesmo me ajudou a montar.

    string

    str_comando = "SELECT * FROM TBL_USUARIOS WHERE USUARIO=@USER AND SENHA=@SENHA";
    using

     

    str_comando = "SELECT * FROM TBL_USUARIOS WHERE USUARIO=@USER AND SENHA=@SENHA";
    using

    str_comando = "SELECT * FROM TBL_USUARIOS WHERE USUARIO=@USER AND SENHA=@SENHA";
    using

     

    (SqlCommand comm = new SqlCommand(str_comando, con))

    {
    comm.Parameters.AddWithValue(

    "@USER", txtUser.Text);
    comm.Parameters.AddWithValue(
    "@SENHA", txtSenha.Text);
    con.Open();
    bool resultSelect = comm.ExecuteReader().HasRows;
    if (resultSelect)
    {
    Session[
    "usuario"] = txtUser.Text;
    lblTESTE.Text = Session[
    "usuario"].ToString();
    }

    legal ele verifica o usuário e senha.
    Mas eu adicionei uma tabela tipos, onde tem ID_TIPO e Descricao, ele guarda 1 para analista e 2 para usuário.
    Então coloquei um if antes do bool

     

    if (dropLogin.SelectedValue == "1")
    Até que deu certo.
    Mas minhas maiores dúvidas são assim.
    Onde será guardado os chamados abertos, eu quero que ele mostre na grid, nome, data,id do chamado,id do usuário, que estão em tabelas separadas, nome e id do usuário na tabela usuario e o resto na tabela chamados.

    Como guardo essas informações sendo que na pagina de login ele pega apenas se é usuário ou não, pois vou precisar jogar isso lá na pagina de chamados abertos.

    Fogo.

     

     


    quinta-feira, 18 de fevereiro de 2010 14:28
  • Vamos lá ,

    Primeira dúvida "Mas eu adicionei uma tabela tipos, onde tem ID_TIPO e Descricao, ele guarda 1 para analista e 2 para usuário."
    Resp : Na sua tabela de usuario você tem que criar um FK(chave estrangeira) aonde irá fazer relacionamento com essa tabela de tipos.
    Quando você popular os dados na sessão você vai trazer esse dado de tipo também.

    exemplo:

                                //Criar objeto datareader
                                SqlDataReader dr;
                                //Popular dados no DataReader
                                dr = comm.ExecuteReader();
                                //Verificar se a consulta teve retorno se sim = true
                                bool resultSelect = dr.HasRows;
                                if (resultSelect)
                                {
                                    //Ler Datareader e popular dados do usuario na sessão
                                    while(dr.Read())
                                    {
                                      Session["codusuario"]  = dr["codusuario"].ToString();
                                      Session["nomedousuario"]  = dr["nomedousuario"].ToString();
                                      Session["tipodousuario"]  = dr["tipodousuario"].ToString();
                                     }
                                    
                                }

    outra dúvida "Onde será guardado os chamados abertos, eu quero que ele mostre na grid, nome, data,id do chamado,id do usuário, que estão em tabelas separadas, nome e id do usuário na tabela usuario e o resto na tabela chamados."

    resp: Você não guarda os chamados em aberto , você vai fazer a consulta na base conforme for solicitado de acordo com a consulta SQL especificada e usuário armazenado na sessão e para mostrar em sua grid .

     


    Américo Arvani MCP/MCTS - WEB
    • Sugerido como Resposta Américo Arvani quinta-feira, 18 de fevereiro de 2010 18:23
    quinta-feira, 18 de fevereiro de 2010 16:09
  • Beleza, mas enquanto ao comando da tebela de tipos, porque devem ser dois neste caso, já que um é o que seleciona o usuario e senha da tebela de usuários e o outro que vc descrveu seria um para a tabela de tipos.

    assim:

    string

     

    str_comando = "SELECT * FROM TBL_USUARIOS WHERE USUARIO=@USER AND SENHA=@SENHA"; //para usuarios
    string str_tipos = "SELECT ID_TIPO,DESCRICAO WHERE ID_TIPO = @ID_TIPO"; // para a tabela tipos

    então teria que inserir mais coisas:

    SqlCommand

     

    comTipo = new SqlCommand(str_tipos, con);
    comTipo.Parameters.AddWithValue("@ID_TIPO", dropLogin.SelectedValue);

     


    bool

     

    resultSelect = comm.ExecuteReader().HasRows; // Quem eu coloco aqui o comTipo ou permaneço com esse?

    while

     

    (dr.Read()) // Apenas um data reader assim mesmo apontando para o comando da tabela usuários ou para tabela tipos? ou os dois;

     

    Entendeu meu desespero.

    quinta-feira, 18 de fevereiro de 2010 17:18
  • Da uma olhada no que tem até agora.
    A questão é onde encaixar a session para pegar o ID do tipo, bem ali quando eu testo o dropdownlist eu coloco 1 pq já sei, mas tem também o 2, então acho que vou fazer o mesmo teste com o valor 2, o que acha?

     

    protected void btnValida_Click(object sender, EventArgs e)

    {

     

    string str_conecta = "Data Source=.\\SQLEXPRESS; Database=DBHelp;Integrated Security=SSPI;";

     

    string str_comando = "SELECT * FROM TBL_USUARIOS WHERE USUARIO=@USER AND SENHA=@SENHA";

     

    string str_tipos = "SELECT ID_TIPO,DESCRICAO WHERE ID_TIPO = @ID_TIPO";

     

     

    SqlConnection con = new SqlConnection(str_conecta);

     

    SqlCommand comm = new SqlCommand(str_comando, con);

     

    SqlCommand comTipo = new SqlCommand(str_tipos, con);

     

    SqlDataReader dr;

    dr = comm.ExecuteReader();

     

    comm.Parameters.AddWithValue(

    "@USER", txtUser.Text);

    comm.Parameters.AddWithValue(

    "@SENHA", txtSenha.Text);

    comTipo.Parameters.AddWithValue(

    "@ID_TIPO", dropLogin.SelectedValue);

    con.Open();

     

    try

    {

     

    if (dropLogin.SelectedValue == "1")

     

    {

     

    bool resultSelect = comm.ExecuteReader().HasRows;

     

    if (resultSelect)

    {

     

    while(dr.Read())

    {

    Session[

    "ID_USER"] = dr["ID_USER"].GetType();

    Session[

    "ID_EMPRESA"] = dr["ID_EMPRESA"].GetType();

    Session[

    "NOME"] = dr["NOME"].ToString();

    Session[

    "SENHA"] = txtSenha.Text;

    Session[

    "USUARIO"] = txtUser.Text;

    }

    lblTESTE.Text =

    "Deu certo " + Session["NOME"].ToString();

    }

    }

     

    else

    {

    lblTESTE.Text =

    "OPS";

    }

     

    }

     

     

     

    catch (Exception err)

    {

    lblTESTE.Text = err.Message;

    }

     

    finally

    {

     

    if (con.State == ConnectionState.Open)

    con.Close();

    dr.Close();

    }

    }

    quinta-feira, 18 de fevereiro de 2010 17:29
  • O que relaciona a tabela TIPO com a TABELA USUARIO ?
    Américo Arvani MCP/MCTS - WEB
    quinta-feira, 18 de fevereiro de 2010 17:29
  • O campo ID_TIPO.
    quinta-feira, 18 de fevereiro de 2010 17:53
  • O campo ID_TIPO.

    VERDADE NÉ, COMO EU TENHO O IPO TAMBÉM NA TABELA USUÁRIOS, NÃO PRECISO DE OUTRA QUERY, APENAS ADICIONO O PARAMETRO.
    ESTOU TENTANDO TESTAR MAS FICA DANDO ERRO NO DATAREADER, ELE DIZ QUE TEM QUE ABRIR POIS O CURRENT ESTA COMO FECHADA.
    quinta-feira, 18 de fevereiro de 2010 17:56
  • mude essa linha

    bool resultSelect = dr.HasRows; 

    Américo Arvani MCP/MCTS - WEB
    • Marcado como Resposta Maciel Alves quinta-feira, 18 de fevereiro de 2010 18:13
    • Não Marcado como Resposta Maciel Alves quinta-feira, 18 de fevereiro de 2010 18:16
    • Marcado como Resposta Maciel Alves quinta-feira, 18 de fevereiro de 2010 18:19
    quinta-feira, 18 de fevereiro de 2010 18:07
  • Há meu velho não é que deu certo.
    Que coisa em.

    Se entendi, isso apenas checou os dados e pegou alguns campos que preciso do banco e colocou na sessio certo?
    Assim, quando um cara abre o chamado, ele guarda mais alguns dados no banco e na session, ai posso recuperar eles na grid da pagina seguinte. Acho que por ai certo?

    Bom valeu por enquanto logo tem mais..heheeh..Value mesmo.

     

    quinta-feira, 18 de fevereiro de 2010 18:12
  • Desculpa, só pra matar, no dropdownlist eu faço dropLogin.selectValue =="1" e ai o código.
    eu coloquei o mesmo código dentro de outro if se for =="2".
    Mas ai não funciona, não faz nada, se que comi bola nesse if. É igualzinho o primeiro.

    quinta-feira, 18 de fevereiro de 2010 18:18
  • Você agora idêntificou quem é seu usuário e guardou isso em uma sessão para ser recuperada na consulta SQL da gridview por exemplo , na proxima pagina você faz a consulta SQL com o SESSION["cod_usuario"].toString() na consulta do WHERE do SQL.

    Se ajudou marque como resposta.


    Américo Arvani MCP/MCTS - WEB
    • Marcado como Resposta Maciel Alves quinta-feira, 18 de fevereiro de 2010 18:25
    quinta-feira, 18 de fevereiro de 2010 18:23
  • CARA A ULTIMA DAS ULTIMAS MESMO QUE PESSO AJUDA.
    ELE TA MEIO PIRADO, SE EU MUDO O TIPO PARA USUARIO E INSIRO UM USUARIO CORRETO BELEZA, SE COLOCO UM ERRADO, ELE DIZ QUE TA ERRADO BLZ.
    MAS QUANDO EU MUDO O TIPO PARA ANALISTA E COLOCO UM NOME CORRETO ELE DIZ QUE ESTA CORRETO, CREIO QUE NÃO ESTOU MANIPULANDO A SESSION CORRETAMENTE.

    SEGUE O CODIGO TODO,. ULTIMA VEZ MESMO. VALEU.

                string str_conecta = "Data Source=.\\SQLEXPRESS; Database=DBHelp;Integrated Security=SSPI;";
                string str_comando = "SELECT * FROM TBL_USUARIOS WHERE ID_TIPO=@ID_TIPO AND USUARIO=@USER AND SENHA=@SENHA";
               
        

                SqlConnection con = new SqlConnection(str_conecta);
                SqlCommand comm = new SqlCommand(str_comando, con);
               
               
               
                comm.Parameters.AddWithValue("@USER", txtUser.Text);
                comm.Parameters.AddWithValue("@SENHA", txtSenha.Text);
                comm.Parameters.AddWithValue("@ID_TIPO", dropLogin.SelectedValue);        
                               
               con.Open();
               SqlDataReader dr = comm.ExecuteReader();          
                      try
                   {

                                if (dropLogin.SelectedValue == "1")
                                {
                                    bool resultSelect = dr.HasRows;

                                    if (resultSelect)
                                    {

                                        while (dr.Read())
                                        {

                                            Session["ID_USER"] = dr["ID_USER"].GetType();
                                            Session["ID_EMPRESA"] = dr["ID_EMPRESA"].GetType();
                                            Session["NOME"] = dr["NOME"].ToString();
                                            Session["SENHA"] = txtSenha.Text;
                                            Session["USUARIO"] = txtUser.Text;
                                        }
                                        dr.Close();
                                        lblTESTE.Text = "Deu certo " + Session["NOME"].ToString();
                                    }
                                }
                                else
                                {
                                    Session.Abandon();
                                    lblTESTE.Text = "ICORRETO";
                                }
                                if (dropLogin.SelectedValue == "2")
                                {
                                    bool resultSelect = dr.HasRows;

                                    if (resultSelect)
                                    {

                                        while (dr.Read())
                                        {

                                            Session["ID_USER"] = dr["ID_USER"].GetType();
                                            Session["ID_EMPRESA"] = dr["ID_EMPRESA"].GetType();
                                            Session["NOME"] = dr["NOME"].ToString();
                                            Session["SENHA"] = txtSenha.Text;
                                            Session["USUARIO"] = txtUser.Text;
                                        }
                                        dr.Close();
                                        lblTESTE.Text = "Deu certo " + Session["NOME"].ToString();
                                    }
                                }
                                else
                                {
                                    Session.Abandon();
                                    lblTESTE.Text = "ICORRETO";
                                }


                            }
                       
                    catch (Exception err)
                    {
                        lblTESTE.Text = err.Message;
                    }
                    finally
                    {
                        if (con.State == ConnectionState.Open)
                            con.Close();
                       
                    }

    quinta-feira, 18 de fevereiro de 2010 18:36
  • Sua lógica que está esquisita.
    Tente.

      bool resultSelect = dr.HasRows;
             if (resultSelect)
             {
                //Na verdade nesse caso eu faria um switch
    
                if(dropLogin.SelectedValue == "1")
                {
                    while (dr.Read())
                    {
    
                        Session["ID_USER"] = dr["ID_USER"].GetType();
                        Session["ID_EMPRESA"] = dr["ID_EMPRESA"].GetType();
                        Session["NOME"] = dr["NOME"].ToString();
                        Session["SENHA"] = txtSenha.Text; //Por que armazenar a senha?
                        Session["USUARIO"] = txtUser.Text; //Você precisa dessa linha?
                    }              
                    dr.Close();
                    lblTESTE.Text = "Deu certo " + Session["NOME"].ToString();            
                 }
    
                if(dropLogin.SelectedValue == "2")
                {
                    while (dr.Read())
                    {
    
                        Session["ID_USER"] = dr["ID_USER"].GetType();
                        Session["ID_EMPRESA"] = dr["ID_EMPRESA"].GetType();
                        Session["NOME"] = dr["NOME"].ToString();
                        Session["SENHA"] = txtSenha.Text; //Por que armazenar a senha?
                        Session["USUARIO"] = txtUser.Text; //Você precisa dessa linha?
                    }              
                    dr.Close();
                    lblTESTE.Text = "Deu certo " + Session["NOME"].ToString();            
                 }
    
    
             }
             else
             {
             
              Session.Abandon();
              lblTESTE.Text = "INCORRETO";
             
             }

    Américo Arvani MCP/MCTS - WEB
    quinta-feira, 18 de fevereiro de 2010 18:55
  • NÃO DA ____ NO DATAREADER, ME FALAI COMO VC COLOCARIA NO SWITCH.
    quinta-feira, 18 de fevereiro de 2010 19:13
  •  bool resultSelect = dr.HasRows;
            if (resultSelect)
            {
                 while (dr.Read())
                    {
                        switch (dropLogin.SelectedValue)
                        {
                            case 1://Caso seja administrado
                                Session["ID_USER"] = dr["ID_USER"].GetType();
                                Session["ID_EMPRESA"] = dr["ID_EMPRESA"].GetType();
                                Session["NOME"] = dr["NOME"].ToString();
                                Session["SENHA"] = txtSenha.Text; //Por que armazenar a senha?
                                Session["USUARIO"] = txtUser.Text; //Você precisa dessa linha?
                                lblTESTE.Text = "Deu certo " + Session["NOME"].ToString();
                            break;
    
                            case 2://Caso seja analista
                                Session["ID_USER"] = dr["ID_USER"].GetType();
                                Session["ID_EMPRESA"] = dr["ID_EMPRESA"].GetType();
                                Session["NOME"] = dr["NOME"].ToString();
                                Session["SENHA"] = txtSenha.Text; //Por que armazenar a senha?
                                Session["USUARIO"] = txtUser.Text; //Você precisa dessa linha?
                                lblTESTE.Text = "Deu certo " + Session["NOME"].ToString();
                            break;
                        }
                    
                    }                        
                         
    
    
            }
            else
            {          
                lblTESTE.Text = "INCORRETO";
            }

    Américo Arvani MCP/MCTS - WEB
    • Marcado como Resposta Maciel Alves quinta-feira, 18 de fevereiro de 2010 19:31
    quinta-feira, 18 de fevereiro de 2010 19:24
  • VALEU, COLOQUEI APENAS ASPAS NOS NUMEROS. DO MAIS PERFEITO.. VALEU A PACIÊNCIA.
    quinta-feira, 18 de fevereiro de 2010 19:32