• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

the one

[resolvido] Webaplication C# sql Server

14 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha para as tuas 2 querys de update e vê se descobres as diferenças

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha para as tuas 2 querys de update e vê se descobres as diferenças

Na maneira como recebo os dados ? :s

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando é que estás a fazer isso? Não é quando carregas no botão?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 { }
            }
        }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...  :thumbsup:

// 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora