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

Guest tsenart

MS SQL Server 2005 Express com C#...

15 mensagens neste tópico

Olá pessoal...

Queria implementar uma simples janelinha de login que comparasse a informação das textboxes(username a password) com a base de dados.. Com o Dataset só consigo pôr a informação nas textboxes mas não é isso que eu desejo... :nono:

Um sistema de controlo de acesso. O formato da tabela da base de dados é username(PK) e password...Nenhum deles pode ser null.

Any help?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se percebi bem a dúvida mas...

Não precisas (nem deves) meter a informação nas textboxes, o que tens de fazer é agarrar nas textboxes e no que tens na base de dados e comparar a ver se é igual. Exemplo:

foreach(DataRow row in dataSet.Tables["tabela"].Rows)
if(textBoxUsername.Text.Equals(row["username"].ToString()) && textBoxPassword.Text.Equals(row["password"].ToString()))
MessageBox.Show("Login efectuado com sucesso!");
else
MessageBox.Show("O login falhou.");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Saco é isso mesmo mas não está a funcionar...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace SchoolSync___ServerApp
{
    public partial class Login_Form : Form
    {
        public Login_Form()
        {
            InitializeComponent();
        }

        AccountsDataSet dataset = new AccountsDataSet();

        private void button_exit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void btn_login_Click(object sender, EventArgs e)
        {
            foreach (DataRow row in dataset.Users.Rows)
            {
                if ((txt_user.Text == row["Username"].ToString()) && (txt_password.Text == row["Password"].ToString()))
                    this.Close();
            }

           
        }
              
    }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ahm... nunca usei um AccountsDataSet (nem sabia que existia). De qualquer das formas... falta aí popular o DataSet... tirar os dados da BD e colocá-los no DataSet... ou estás as fazer isso noutro lado?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao tas a perceber AccountDataSet é o dataset que eu já defeni. E é representado por uma classe. A database já está com dois registos. Não percebo porque é que isto nao funciona...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu se fosse a ti primeiro experimentava tirar directamente da bd para um DataSet e ver se funcionava... e só depois criavas uma classe para o representar... já agora certifica-te que os nomes das colunas batem certo com os nomes dos campos da base de dados

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu se fosse a ti primeiro experimentava tirar directamente da bd para um DataSet e ver se funcionava... e só depois criavas uma classe para o representar... já agora certifica-te que os nomes das colunas batem certo com os nomes dos campos da base de dados

Não não não... O próprio IDE cria a classe de qualquer dataset que eu crie....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda não percebi essa de o IDE criar uma classe para o dataset mas pronto...

Esse código está bem. Só não tenho a certeza se não deveria ser dataset.Tables["Users"].Rows, mas suponho que dataset.Users nessa classe seja válido...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não precisas de ter aí um dataset com as tuas contas pra nada (a não ser q vás usar pra outra coisa além da comparação do que foi inserido nas textboxs) ...

Depois, para comparares se o user e a pass estão correctas, podes fazer algo do tipo:

Dim conn as SqlConnection = new SqlConnection("a tua connectionstring aqui")
Dim cmd as SqlCommand = New SqlCommand("SELECT Count(*) FROM tabela WHERE Username=@User AND Password=@Pass",conn)
cmd.Parameters.Add("@User",SqlDbType.Varchar).Value = txtUsername.text
cmd.Parameters.Add("@Pass",SqlDbType.Varchar).Value = txtPassword.text

Dim count as Integer = cmd.ExecuteScalar()

If count = 0 then
messagebox.show("nao existe")
else
messagebox.show("existe")
end if

Pronto, é +/- isto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a exasperar.... Não consigo pôr isto a funcionar!!!!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;


namespace SchoolSync___ServerApp
{
    public partial class Login_Form : Form
    {
        public Login_Form()
        {
            InitializeComponent();
        }

        private void button_exit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void btn_login_Click(object sender, EventArgs e)
        {
            AccountsDataSet DataSet = new AccountsDataSet();

            foreach (DataRow row in DataSet.Users.Rows)
                if ((txt_user.Text.Equals(row["Username"].ToString())) && (txt_password.Text.Equals(row["Password"].ToString())))
                    this.Close();
        }

       
              
    }
}

Não acontece nada!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas tu por acaso leste o post que escrevi ? O teu código não tem sentido para o que pretendes. Estares a percorrer todos os registos do Dataset e ver se algum deles coincide com o que puseste nas textboxs nao é correcto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é correcto? Percebi que era desnecessário.... Mas ok. Vou tentar como tu indicaste.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na minha opinião não é correcto. Repara, se tiveres o dataset carregado com 1000 registos, vais percorrer um a um e fazer o teste de igualdade, ou seja, vai-te tornar o processo bastante lento, quando podes fazer uma consulta à BD e verificar essa mesma igualdade de uma forma muito mais rapida (solução que te apresentei no post).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim... Tens razão... Eu é que não sei muito bem mexer com databases commands. Lol.

Funcionou.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace SchoolSync___ServerApp
{
    public partial class Login_Form : Form
    {
        public Login_Form()
        {
            InitializeComponent();
        }

        private void button_exit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void btn_login_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Tomás Senart\My Documents\Visual Studio 2005\Projects\SchoolSync - ServerApp\SchoolSync - ServerApp\Accounts.mdf;Integrated Security=True;User Instance=True");
            conn.Open();
            SqlCommand cmd = new SqlCommand("SELECT Count(*) FROM Users WHERE Username=@User AND Password=@Pass", conn);
            cmd.Parameters.Add("@User",SqlDbType.VarChar).Value = txt_user.Text;
            cmd.Parameters.Add("@Pass",SqlDbType.VarChar).Value = txt_password.Text;
            
            int conta = (int)cmd.ExecuteScalar();

            if (conta == 0)
            {
                txt_user.Clear();
                txt_password.Clear();
            }

            else
            {
                conn.Close();
                this.Close();
            }
        }

       
              
    }
}

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