Usuário com melhor resposta
Ajuda com objeto Session mais SQL

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.
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
-
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
-
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
Todas as Respostas
-
-
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
usingstr_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.
-
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
-
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.
-
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();
}
}
-
-
-
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. -
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
-
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.
-
-
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
-
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();
} -
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 -
-
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
-