kombypetras Posted May 21, 2009 at 03:59 PM Report #266186 Posted May 21, 2009 at 03:59 PM 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(); }
Betovsky Posted May 21, 2009 at 07:29 PM Report #266243 Posted May 21, 2009 at 07:29 PM 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#. "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
kombypetras Posted June 1, 2009 at 11:24 PM Author Report #269151 Posted June 1, 2009 at 11:24 PM 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.
renafi Posted June 2, 2009 at 08:59 AM Report #269185 Posted June 2, 2009 at 08:59 AM 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. Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist
kombypetras Posted June 2, 2009 at 10:41 AM Author Report #269217 Posted June 2, 2009 at 10:41 AM 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.
Betovsky Posted June 2, 2009 at 05:24 PM Report #269343 Posted June 2, 2009 at 05:24 PM 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. "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
kombypetras Posted June 2, 2009 at 07:13 PM Author Report #269384 Posted June 2, 2009 at 07:13 PM Desculpa nao consegui perceber a tua explicação será que podias explicar isso melhor???
Betovsky Posted June 2, 2009 at 09:53 PM Report #269451 Posted June 2, 2009 at 09:53 PM É 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. "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
kombypetras Posted June 3, 2009 at 09:24 AM Author Report #269528 Posted June 3, 2009 at 09:24 AM Betovsky, já consegui resolver a minha situação. Obrigado pela grande ajuda. Thanks. 😄 :D 🙂👍 Se prescisar de mais alguma coisa eu volto 🙂 :) 🙂 :) 🙂 :) 🙂 :) 🙂 :) 🙂 :) 🙂 :) 🙂 :) 🙂 :) 🙂 :)
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