Ajuda - Busca - Membros - Calendário
Versão Completa: (Resolvido) Ajuda [Iniciando]
Fórum Script Brasil > Programação & Desenvolvimento > .NET
Henrique Neto
Bem estou iniciando em .net e gostaria de realizar uma tela de login e senha catando as informacoes do banco....
Cheguei a esse codigo so que não tenho mais nocao de como é.
:S

CODE
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace Projeto
{
    public partial class FPrincipal : Form
    {
       private MySqlConnection mConn;
       private MySqlDataAdapter bdAdapter;
       private DataSet bdDataSet;


        public FPrincipal()
        {
            InitializeComponent();
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Definindo DataSet.....

            bdDataSet = new DataSet();

            //Definindo String da Conexao ....

            mConn = new MySqlConnection(" Persist Security Info=False;server=localhost;database=pontes;uid=root;server=localhost;database=p
ontes;uid=root;pwd=");

            //Abrindo Conexao ....
            try
            {
                mConn.Open();
            }
            catch
            {
                MessageBox.Show("Conexão não realizada.");
            }


            //Testando se a conexao foi realizada....
            if (mConn.State == ConnectionState.Open)
            {
                MySqlCommand commS = new MySqlCommand("select login, senha from user where login = " +textLogin+ " and senha = " +textSenha ,mConn);
                commS.BeginExecuteNonQuery;
            }


        }

      
    }
}


Maior duvida e nessa linha
MySqlCommand commS = new MySqlCommand("select login, senha from user where login = " +textLogin+ " and senha = " +textSenha ,mConn);
commS.BeginExecuteNonQuery;

se a concatenacao está certa ?
e depois disso o que faco para ve se o login e a senha informada estao certas ...
caso seja certa abrir outro form.
caso não de uma mensagem d error.

e esta dando error nessa linha
commS.BeginExecuteNonQuery;

Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement C:\Users\user\Documents\Visual Studio 2008\Projects\Projeto\Projeto\Form1.cs 55 17 Projeto



desde já grato
kuroi
a concatenacao ta ate certa, mas faltou aspa simples:
CODE
"select login, senha from user where login = '" + textLogin + "' and senha = '" + textSenha + "'"


e pra ler o retorno, não pode ser com ExecuteNonQuery(), porque o ExecuteNonQuery() não tras retorno. você pode usar um DataReader e pegar atravez do ExecuteReader():
CODE
MySqlDataReader rs = commS.ExecuteReader();

if (rs.Read())
{
    //achou o login
}
else
{
    //não achou
}
Henrique Neto
kuroi o codigo ficou desse modo agora....

CODE
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace Projeto
{
    public partial class FPrincipal : Form
    {
       private MySqlConnection mConn;
       private MySqlDataAdapter bdAdapter;
       private DataSet bdDataSet;


        public FPrincipal()
        {
            InitializeComponent();
            
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Definindo DataSet.....

            bdDataSet = new DataSet();

            //Definindo String da Conexao ....

            mConn = new MySqlConnection(" Persist Security Info=False;server=localhost;database=pontes;uid=root;server=localhost;database=p
ontes;uid=root;pwd=");

            //Abrindo Conexao ....
            try
            {
                mConn.Open();
            }
            catch
            {
                MessageBox.Show("Conexão não realizada.");
            }


            //Testando se a conexao foi realizada....
            if (mConn.State == ConnectionState.Open)
            {
                MySqlCommand commS = new MySqlCommand("select login, senha from user where login = '" + textLogin + "' and senha = '" + textSenha + "'");
                MySqlDataReader rs = commS.ExecuteReader();

                if (rs.Read)
                {

                }
                else
                {
                    MessageBox.Show('Tente Novamente / Login ou Senha inválido');
                }
            }
          


        }

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

      

      
    }
}


Ta dando um error nessa linha if (rs.Read)

Error 1 Cannot convert method group 'Read' to non-delegate type 'bool'. Did you intend to invoke the method?


Ai me surge outra duvida, todo form que irei me conectar ao banco eu terei q criar um objeto dataset e um MySqlConnection ?


E para caso o login seja aceito como faria para criar um outro form caso o login fosse aceito seria criando um objeto form ?
kuroi
QUOTE(Henrique Neto @ 22/02/2010 - 23:35) *
Ta dando um error nessa linha if (rs.Read)

isso ai acho q é porque faltou abrir e fechar os parenteses. assim:
CODE
if (rs.Read())



QUOTE(Henrique Neto @ 22/02/2010 - 23:35) *
Ai me surge outra duvida, todo form que irei me conectar ao banco eu terei q criar um objeto dataset e um MySqlConnection ?

hum, se eu lembro bem das minhas epocas de c#, se você não quiser abrir a connection a cada formulario, você poderia criar uma propriedade MySqlConnection estatica em uma classe e usar essa propriedade. se não me engano, nem precisa instanciar o objeto, você pode acessar direto pelo nome da classe.
se tiver dificuldade nisso, fala ai.


QUOTE(Henrique Neto @ 22/02/2010 - 23:35) *
E para caso o login seja aceito como faria para criar um outro form caso o login fosse aceito seria criando um objeto form ?

bom, pra adicionar um form novo no projeto é so entrar no menu Project -> Add Windows Form...
pra abri-lo depois do login, o codigo seria esse:
CODE
Form2 f = new Form2();
f.Show();

onde Form2 é o nome do seu formulario.
Henrique Neto
essa linha de codigo
MySqlCommand commS = new MySqlCommand("select login, senha from user where login = '" + textLogin + "' and senha = '" + textSenha + "'",mConn);
MySqlDataReader rs = commS.ExecuteReader();


eu tive q colocar esse mconn depois do codigo SQL, sem ele dava error.

porem quando coloco o login e a senha que estao o banco sempre da login e senha invalida não se batem uma com a outra...


e eu coloquei o novo form

if (rs.Read())
{
Form FPrincipal = new Form();
FPrincipal.Show();
}
kuroi
QUOTE(Henrique Neto @ 23/02/2010 - 00:05) *
eu tive q colocar esse mconn depois do codigo SQL, sem ele dava error.

é verdade, não tinha reparado nisso.


QUOTE(Henrique Neto @ 23/02/2010 - 00:05) *
porem quando coloco o login e a senha que estao o banco sempre da login e senha invalida não se batem uma com a outra...

textLogin e textSenha são textboxs??
então faca assim:
CODE
MySqlCommand commS = new MySqlCommand("select login, senha from user where login = '" + textLogin.Text + "' and senha = '" + textSenha.Text + "'", mConn);
Henrique Neto
consegui parceiro.
GRATO =)

eu posso destruir o primeiro form quando o principal for aberto ?

tipo login e senha primeiro form, form com menu (form principal) ....
depois q o login e senha fosse aceito destruiria o login e senha e deixava o principal aberto

caso ele(fprincipal) fosse fechado a aplicacao terminaria...
kuroi
huuum, se não me engano, se você fechar o primero form, a aplicacao toda sera fechada, não??
porque o primero form carregado é considerado o principal.

não sei se teria uma forma mais facil pra resolver isso, mas eu faria a partir da classe ApplicationContext.
mas isso daria trabalho, aqui tem um exemplo, mais o menos (olhe o penultimo post): http://forums.devx.com/archive/index.php/t-56168.html


mas você poderia contornar isso de uma forma mais facil. em vez de destruir o primero form, você o esconderia. tipo assim:
CODE
private void Form2_Load(object sender, EventArgs e)
{
    Application.OpenForms["Form1"].Visible = false;
}

onde Form2 é o seu form de menu e Form1 era o form de login.

e na hora de fechar o segundo form, você usaria esse codigo:
CODE
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
    Application.OpenForms["Form1"].Close();
}

assim, ele fecha o form1 e, por consequencia, a aplicacao toda.

EDITADO:
a e não esquece de criar os eventos Load e FormClosed, não é so copiar o codigo.
Henrique Neto
kuroi nessa linha ele da Referencia de objeto não definida para uma instancia de um objeto NULLREFERENCE Exception
private void FPrincipal_Load(object sender, EventArgs e)
{
Application.OpenForms["Form1"].Visible = false;

}



q error e esse ?
kuroi
acho q ele não achou o formulario entre os forms abertos.
Form1 era so um nome q eu passei de exemplo, você tem q altera-lo para o nome do seu form de login.
Henrique Neto
deu tdo certo kuroi obrigado =)

você tem algum exemplo de listagem de dados em um grid ?

Henrique Neto
resolvido =)
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.