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

kombypetras

Ligar C# com base de dados do SQL Server

9 mensagens neste tópico

Boas pessoal.

Estou a desenvolver um projecto em c# e tenho de aprender tudo de raiz. Tenho de ligar a minha aplicação a uma base de dados.

O meu problema é o seguinte:

A minha aplicação tem um sistema de Login para só utilizadores com permissão poderem aceder a todas as funcionalidades da mesma, e guardo todos esses dados numa base de dados feita no SQLServer.

Tenho o seguinte código implementado mas gera uma excepção a meio (no seguinte passo: SqlDataReader sdr = cmd1.ExecuteReader(); )será que alguém me poderia dar umas luzes do que se está a passar??

private void button1_Click(object sender, EventArgs e)
        {
            String nome = null,pass = null,carg = null;
            String c = comboBox1.Text;
            String n = textBox1.Text;
            String p = textBox2.Text;

            String connectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Documentos_Escolares\\2008-2009\\2_Semestre\\3_Ano\\Projecto\\DistriVig_2\\DistriVig_2\\DistriVig_2.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
            SqlConnection sqlConn1 = new SqlConnection(connectionString);
            SqlConnection sqlConn2 = new SqlConnection(connectionString);
            //Abrir conecção a base de dados
            sqlConn1.Open();
            sqlConn2.Open();
            //operaçoes para trabalhar com a base de dados
            try
            {
                SqlCommand cmd1 = new SqlCommand("SELECT nome,cargo FROM Professor WHERE nome = n", sqlConn1);
                SqlDataReader sdr = cmd1.ExecuteReader();


                while (sdr.Read())
                {
                    nome = (String)sdr["nome"];
                    carg = (String)sdr["cargo"];
                }


                SqlCommand cmd2 = new SqlCommand("select pass from Login_Prof where cod_prof = (select cod_prof from Professor where nome = n)", sqlConn2);
                SqlDataReader sdr2 = cmd1.ExecuteReader();

                while (sdr2.Read())
                    pass = (String)sdr2[0];                

            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.ToString());
            }
            finally
            {
                sqlConn1.Close();
                sqlConn2.Close();
            }

            
            //Fechar conecção com a Base de Dados
            if (c.Equals("Categoria do Professor"))
            {
                MessageBox.Show("Escolha a sua categoria!");
            }
            else
                if (n.Equals(""))
                {
                    MessageBox.Show("Nome nao introduzido!");
                }
                else
                    if (p.Equals(""))
                    {
                        MessageBox.Show("Password nao introduzida!");
                    }
                    else
                        if (c.Equals(carg))
                        {
                            if (n.Equals(nome))
                            {
                                if (p.Equals(pass))
                                {
                                    MessageBox.Show("Login efectuado com sucesso!");
                                }
                                else
                                    MessageBox.Show("Utilizador Errado!\nVerifique se introduziu uma password válida");
                            }
                            else
                                MessageBox.Show("Utilizador Errado!\nVerifique se introduziu um nome válido");
                        }
                        else
                            MessageBox.Show("Utilizador Errado!\nVerifique a Categoria");
            this.Dispose();
            
        }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é porque a tua query sql está errada. Logo quando mandas executá-la dá erro (ExecuteReader).

O problema está no 'n', ao dizeres "where nome = n", esse 'n' não é a tua variável. É literalmente n, e como na base de dados não existe nada com esse nome dá erro.

Aconselho-te a leres o seguinte link que ensina tudo o que precisas de saber para interagir com uma base de dados em C#.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem pessoal, resolvi o problema da query de sql mas nao obtem nenhum valor. Na sei que se passa... será que alguem me pode ajudar. No codigo anterior so alterei a situaçao da variavel n.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alteraste como? Mostra o código só para confirmar se ficou ok. Se isso estiver bem e continuar a não dar, é porque não tens o valor correspondente na BD.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho este código por enquanto.

private void button1_Click(object sender, EventArgs e)
        {
            String nome = null,pass = null,carg = null;
            String c = comboBox1.Text;
            String n = textBox1.Text;
            String p = textBox2.Text;

            String connectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Documentos_Escolares\\2008-2009\\2_Semestre\\3_Ano\\Projecto\\DistriVig_2\\DistriVig_2\\DistriVig_2.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
            SqlConnection sqlConn1 = new SqlConnection(connectionString);
            SqlConnection sqlConn2 = new SqlConnection(connectionString);
            //Abrir conecção a base de dados
            sqlConn1.Open();
            sqlConn2.Open();
            //operaçoes para trabalhar com a base de dados
            // para colocar uma variavel no comando sql -> 'n'  ou -> '@n' ver qual funca
            SqlCommand cmd1 = new SqlCommand("SELECT nome,cargo FROM Professor WHERE nome = '@n'", sqlConn1);
            SqlDataReader sdr = cmd1.ExecuteReader();
            while (sdr.Read())
            {
                nome = (String)sdr[0];
                carg = (String)sdr[1];
            }
            sdr.Close();
            SqlCommand cmd2 = new SqlCommand("SELECT pass FROM Login_Prof WHERE cod_prof = (SELECT cod_prof FROM Professor WHERE nome = '@n')", sqlConn2);
            SqlDataReader sdr2 = cmd2.ExecuteReader();
            while (sdr2.Read())
            {
                pass = (String)sdr2[0];
            }
            sdr2.Close();
            
            MessageBox.Show(c + "\n" + n + "\n" + p + "\nSegunda Versão\n" + nome + "\n" + pass + "\n" + carg + "\n");
            //Fechar conecção com a Base de Dados
            if (c.Equals("Categoria do Professor"))
            {
                MessageBox.Show("Escolha o seu Cargo!");
            }
            else
                if (n.Equals(""))
                {
                    MessageBox.Show("Nome nao introduzido!");
                }
                else
                    if (p.Equals(""))
                    {
                        MessageBox.Show("Password nao introduzida!");
                    }
                    else
                        if (c.Equals(carg))
                        {
                            if (n.Equals(nome))
                            {
                                if (p.Equals(pass))
                                {
                                    MessageBox.Show("Login efectuado com sucesso!");
                                    sdr.Close();
                                    sdr2.Close();
                                    sqlConn1.Close();
                                    sqlConn2.Close();
                                    this.Dispose();
                                }
                                else
                                    MessageBox.Show("Utilizador Errado!\nVerifique se introduziu uma password válida");
                            }
                            else
                                MessageBox.Show("Utilizador Errado!\nVerifique se introduziu um nome válido");
                        }
                        else
                            MessageBox.Show("Utilizador Errado!\nVerifique se introduziu o cargo correcto");     
        }

Nao funciona na parte

while(sdr.read){

    nome = (String)sdr[0];

    carg = (String)sdr[1];

}

Já experimentei imprimir uma string dentro do ciclo e não a imprime!!

Não consigo perceber porque isto nao funciona, ate porque já pesquisei bastante e não consigo perceber o porque? Em relação a não ter os valores na base de dados, acho isso impossível até porque já experimentei a query no SQLServer e deu tudo certinho.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oky já puseste na query para usar o parâmetro @n. Mas não estás a definir qual o valor do parâmetro. Tens de adicionar o parâmetro ao comando.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa nao consegui perceber a tua explicação será que podias explicar isso melhor???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É assim. Na query indicaste que vais usar uma variável 'n'. O nome disso é parâmetro. Mas não estás a indicar qual o valor dessa variável, logo não vai ter valor nenhum, o que faz com que quando executas o SqlCommand não te devolva nada.

A forma de indicares ao SqlCommand o valor do 'n' é criares um SqlParameter. Em que especificas que o SqlParameter é para a "variável" @n, dizer que é do tipo nVarChar (presumo eu, será o tipo da coluna nome na base de dados) e irá ter o valor de "XPTO".

Podes ver melhor explicado aqui.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Betovsky, já consegui resolver a minha situação.

Obrigado pela grande ajuda.

Thanks.  :D :D :):thumbsup:

Se prescisar de mais alguma coisa eu volto

:) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :):)

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