the one Posted May 6, 2009 at 11:37 AM Report #261827 Posted May 6, 2009 at 11:37 AM Para uma melhor compreensão da aplicação, vou postar aqui todo o meu codigo da aplicação . O que eu pretendo é numa webapplication em C# , fazer o login e quando o login é efectuado , ele guarda a data / hora ,e o ip em dois campos (lastlogin e lastip) numa tabela (utilizadores) . O codigo para conseguir o IP e a Data/hora está correcto porque ele está a apresenta-los numa label, apenas quando o login é feito com as credenciais correctas . Apenas não guarda e não sei porque :x public partial class _Default : System.Web.UI.Page { int a; protected void Button1_Click(object sender, EventArgs e) { string connectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\escola.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; SqlConnection sqlconn = new SqlConnection(connectionString); sqlconn.Open(); SqlCommand comm = new SqlCommand("Select count(*) From utilizadores Where username = @utilizador And password = @password", sqlconn); comm.Parameters.Add("@utilizador", SqlDbType.NVarChar).Value = TextBox1.Text; comm.Parameters.Add("@password", SqlDbType.NVarChar).Value = TextBox2.Text; int i = (int)comm.ExecuteScalar(); // Se i for maior que zero é porque achou o usuario/senha, senao não acho if (i > 0) { Lbl.Text = ("Senha correcta"); string result = String.Empty; result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (string.IsNullOrEmpty(result)) { result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } if (string.IsNullOrEmpty(result)) { result = HttpContext.Current.Request.UserHostAddress; } lblip.Text = (result); DateTime x = DateTime.Now; lbldate.Text = (Convert.ToString(x)); a = 0; } else Lbl.Text = ("Senha ou utilizador errado"); a = 1; sqlconn.Close(); if (a == 0) { //guarda, pois o user é correcto try { string connectionString2 = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\escola.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; SqlConnection conn = new SqlConnection(connectionString2); SqlCommand cmd = new SqlCommand("UPDATE lastlogin,lastip FROM utilizadores WHERE username=@utilizador", conn); cmd.Parameters.AddWithValue("@utilizador", TextBox1.Text); cmd.Parameters.AddWithValue("@lastlogin", lbldate.Text); cmd.Parameters.AddWithValue("@lastip", lblip.Text); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); } finally { } } } Só uma coisa, no comando sql que eu uso, estou a usar o UPDATE , porque o que eu quero guardar é sempre a ultima data em que o utilizador esteve "logado" . Mas a primeira vez, o valor vai estar null, ou seja , não vai estar nada na tabela . É possivel fazer UPDATE a um valor null ? :s
Betovsky Posted May 6, 2009 at 11:44 AM Report #261831 Posted May 6, 2009 at 11:44 AM Yep. É perfeitamente possivel fazer um update a um valor null. O teu problema é que não estas a fazer update a nada. Não estás a indicar que valores fazer update, só os campos. "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk
the one Posted May 6, 2009 at 11:59 AM Author Report #261834 Posted May 6, 2009 at 11:59 AM Yep. É perfeitamente possivel fazer um update a um valor null. O teu problema é que não estas a fazer update a nada. Não estás a indicar que valores fazer update, só os campos. Ja mudei o codigo Meti o seguinte no UPDATE : SqlCommand cmd = new SqlCommand("UPDATE utilizadores set lastlogin=lbldate.Text, lastip=lblip.Text where username=TextBox1.Text", conn); Mas continua a não guardar nada :x
Betovsky Posted May 6, 2009 at 12:49 PM Report #261838 Posted May 6, 2009 at 12:49 PM Mas continua a não guardar nada :x Porque será....Aconselho-te a ires copiar o update à mesma fonte de onde copias-te a primeira query. Ou então perguntares à pessoa que fez a 1ª query porque é que essa funciona e a do update não. "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk
vitortomaz Posted May 6, 2009 at 12:59 PM Report #261841 Posted May 6, 2009 at 12:59 PM O endereço IP ? não terás problemas com redes internas? ou seja, IP's iguais, basta existirem 2 redes internas diferentes mas na mesma gama http://vitortomaz.blogspot.com/
the one Posted May 6, 2009 at 02:44 PM Author Report #261864 Posted May 6, 2009 at 02:44 PM O endereço IP ? não terás problemas com redes internas? ou seja, IP's iguais, basta existirem 2 redes internas diferentes mas na mesma gama Não porque estou a executar no localhost ainda . Porque será.... Aconselho-te a ires copiar o update à mesma fonte de onde copias-te a primeira query. Ou então perguntares à pessoa que fez a 1ª query porque é que essa funciona e a do update não. A fonte onde vi onde se fazia o login, só tinha o SELECT . Já pesquisei tudo por Update e nada :s Decidi fazer uma experiencia , coloqei o codigo da ligação no webform_load e quando vou à base de dados, os valores já não estão a Null, mas sim um espaço em branco . Isto acontece porque no inicio, o lblip e a lbldate estão com o atributo .text em branco . daí, deduzi que o erro estivesse aqui : SqlCommand cmd1 = new SqlCommand("UPDATE utilizadores set lastlogin=@lastlogin, lastip=@lastip where username=@utilizador", conn1); cmd1.Parameters.Add("@utilizador", SqlDbType.NVarChar).Value = TextBox1.Text; cmd1.Parameters.Add("@lastlogin", SqlDbType.NVarChar).Value = lbldate.Text; cmd1.Parameters.Add("@lastip", SqlDbType.NVarChar).Value = lblip.Text; Alguém me pode orientar ?
Betovsky Posted May 6, 2009 at 02:49 PM Report #261866 Posted May 6, 2009 at 02:49 PM Olha para as tuas 2 querys de update e vê se descobres as diferenças "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk
the one Posted May 6, 2009 at 03:16 PM Author Report #261872 Posted May 6, 2009 at 03:16 PM Olha para as tuas 2 querys de update e vê se descobres as diferenças Na maneira como recebo os dados ? :s
Betovsky Posted May 6, 2009 at 03:42 PM Report #261875 Posted May 6, 2009 at 03:42 PM Não na query sql mesmo. SqlCommand cmd = new SqlCommand("UPDATE utilizadores set lastlogin=lbldate.Text, lastip=lblip.Text where username=TextBox1.Text", conn); VS SqlCommand cmd1 = new SqlCommand("UPDATE utilizadores set lastlogin=@lastlogin, lastip=@lastip where username=@utilizador", conn1); [/quote] Se dizes que a debaixo funciona (faz o update) e a de cima não, então é ver as diferenças. "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk
the one Posted May 6, 2009 at 03:53 PM Author Report #261877 Posted May 6, 2009 at 03:53 PM Não na query sql mesmo. VSSe dizes que a debaixo funciona (faz o update) e a de cima não, então é ver as diferenças.[/code] Já tenho esse codigo e continua a não dar. Penso que ele nao esta a assumir isto : cmd1.Parameters.Add("@utilizador", SqlDbType.NVarChar).Value = TextBox1.Text; cmd1.Parameters.Add("@lastlogin", SqlDbType.NVarChar).Value = lbldate.Text; cmd1.Parameters.Add("@lastip", SqlDbType.NVarChar).Value = lblip.Text;
Betovsky Posted May 6, 2009 at 04:00 PM Report #261879 Posted May 6, 2009 at 04:00 PM Quando é que estás a fazer isso? Não é quando carregas no botão? "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk
the one Posted May 6, 2009 at 04:02 PM Author Report #261881 Posted May 6, 2009 at 04:02 PM Quando é que estás a fazer isso? Não é quando carregas no botão? Sim, o codigo de botão é este : protected void Button1_Click(object sender, EventArgs e) { string connectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\escola.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; SqlConnection sqlconn = new SqlConnection(connectionString); sqlconn.Open(); SqlCommand comm = new SqlCommand("Select count(*) From utilizadores Where username = @utilizador And password = @password", sqlconn); comm.Parameters.Add("@utilizador", SqlDbType.NVarChar).Value = TextBox1.Text; comm.Parameters.Add("@password", SqlDbType.NVarChar).Value = TextBox2.Text; int i = (int)comm.ExecuteScalar(); // Se i for maior que zero é porque achou o usuario/senha if (i > 0) { Lbl.Text = ("Senha correcta"); a = 0; } else Lbl.Text = ("Senha ou utilizador errado"); a = 1; sqlconn.Close(); if (a == 0) { //guarda, pois o user é correcto try { string connectionString2 = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\escola.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; SqlConnection conn1 = new SqlConnection(connectionString2); conn1.Open(); SqlCommand cmd1 = new SqlCommand("UPDATE utilizadores set lastlogin=@lastlogin, lastip=@lastip where username=@utilizador", conn1); cmd1.Parameters.Add("@utilizador", SqlDbType.NVarChar).Value = TextBox1.Text; cmd1.Parameters.Add("@lastlogin", SqlDbType.NVarChar).Value = lbldate.Text; cmd1.Parameters.Add("@lastip", SqlDbType.NVarChar).Value = lblip.Text; cmd1.ExecuteNonQuery(); conn1.Close(); } finally { } } }
Mxix Posted May 7, 2009 at 02:59 AM Report #262025 Posted May 7, 2009 at 02:59 AM http://www.portugal-a-programar.pt/index.php?showtopic=27234 http://www.portugal-a-programar.pt/index.php?showtopic=27224 Mas o que é que se passa? Andam a copiar o código uns aos outros? Já agora nunca vai guardar porque o 'a' vai ser sempre igual a 1 lol sempre bom... 👍 // Se i for maior que zero é porque achou o usuario/senha if (i > 0) { Lbl.Text = ("Senha correcta"); a = 0; } else { Lbl.Text = ("Senha ou utilizador errado"); a = 1; } sqlconn.Close(); Como indicou o Betovsky sem os parentesis 'a' vai ser sempre 1. Haxta
the one Posted May 7, 2009 at 10:10 AM Author Report #262064 Posted May 7, 2009 at 10:10 AM Done 🙂 Obrigado 👍
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now