none
Erro na hora de cadastrar com sql server RRS feed

  • Pergunta

  • Estou tendo problemas, mas não sei se é por que não está cadastrando ou não está funcionando o código de consultar...

    Eu clico no botão consultar, mas não aparece nada, apenas a mensagem "Dados invalidos"...

     

    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 System.IO;
    using System.Data.SqlClient;
    using System.Drawing.Imaging;
    using System.Drawing;
    using Microsoft.VisualBasic;


    namespace Matricula
    {
        public partial class telacadastrar : Form
        {
            public telacadastrar()
            {
                InitializeComponent();
            }
            SqlConnection con;
            SqlCommand cmd;
            SqlDataAdapter adapter;
            DataSet ds;
            int linhaNumero = 0;
            MemoryStream ms;
            byte[] foto_array;

            void carregaDados()
            {
                cmd = new SqlCommand("getAlunos", con);
                cmd.CommandType = CommandType.StoredProcedure;
                adapter = new SqlDataAdapter(cmd);
                adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
                ds = new DataSet();
                adapter.Fill(ds, "Alunos");
            }


            private void telacadastrar_Load(object sender, EventArgs e)
            {
                if (ds.Tables[0].Rows.Count > 0)
                {
                    texbmatricula.Text = ds.Tables[0].Rows[linhaNumero][0].ToString();
                    texbnome.Text = ds.Tables[0].Rows[linhaNumero][1].ToString();
                    texbendereco.Text = ds.Tables[0].Rows[linhaNumero][2].ToString();
                   

                    picfoto.Image = null;

                    if (ds.Tables[0].Rows[linhaNumero][3] != System.DBNull.Value)
                    {
                        foto_array = (byte[])ds.Tables[0].Rows[linhaNumero][3];
                        MemoryStream ms = new MemoryStream(foto_array);
                        picfoto.Image = Image.FromStream(ms);
                    }
                }
                else
                {
                    MessageBox.Show("Não há registros na tabela");
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                opf1.Filter = "jpeg|*.jpg|bmp|*.bmp|all files|*.*";
                DialogResult res = opf1.ShowDialog();

                if (res == DialogResult.OK)
                {
                    picfoto.Image = Image.FromFile(opf1.FileName);
                }

            }

            private void butcadastrar_Click(object sender, EventArgs e)
            {
                string strcon = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Cadastro.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
                con = new SqlConnection(strcon);
                cmd = new SqlCommand("inserir_Alunos", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@matricula", texbmatricula.Text);
                cmd.Parameters.AddWithValue("@nome", texbnome.Text);
                cmd.Parameters.AddWithValue("@endereco", texbendereco.Text);


                con.Open();
                int n = cmd.ExecuteNonQuery();
                con.Close();
                if (n > 0)
                {
                    MessageBox.Show("registro inserido com sucesso.");
                    carregaDados();
                }
                else
                    MessageBox.Show("Erro ao inserir registro.");

            }

            private void butconsultar_Click(object sender, EventArgs e)
            {
                try
                {
                    int n = Convert.ToInt32(Interaction.InputBox("Informe o código do Aluno:", "Procurar", "1", 450, 400));
                    DataRow drow;
                    drow = ds.Tables[0].Rows.Find(n);
                    if (drow != null)
                    {
                        linhaNumero = ds.Tables[0].Rows.IndexOf(drow);
                        texbmatricula.Text = drow[0].ToString();
                        texbnome.Text = drow[1].ToString();
                        texbendereco.Text = drow[2].ToString();
                        picfoto.Image = null;
                        if (drow[3] != System.DBNull.Value)
                        {
                            foto_array = (byte[])drow[3];
                            MemoryStream ms = new MemoryStream(foto_array);
                            picfoto.Image = Image.FromStream(ms);
                        }
                    }
                    else
                        MessageBox.Show("Registro não localizado.");
                }
                catch
                {
                    MessageBox.Show("Dados inválidos.");
                }

            }
        }
    }

    sexta-feira, 5 de novembro de 2010 02:40

Respostas

  • Fabricio,

    Troca o que está nas últimas linhas:

    catch
    {
       MessageBox.Show("Dados inválidos.");
    }
    
    

    e troca por:

    catch(Exception ex)
    {
       throw new Exception("Dados inválidos.", ex);
    }
    
    
    Não é a resolução do seu problema, mas com certeza ajuda a resolver.
    Samuel Fabel
    sexta-feira, 5 de novembro de 2010 17:25

Todas as Respostas

  • Olá,

    Pelo que percebi, me parece que o problema é que você está tentando utilizar um DataSet nulo no evento clique do Botão de Consultar, ou seja, o seu DataSet é preenchido (fill) através do metodo carregaDados que somente é chamado através do clique do botão de cadastrar e não de consultar, sendo assim me parece que esté código somente funcionária caso você SEMPRE clicasse primeiramente em cadastrar para depois clique em consultar.

    Você pode verificar se realmente é isto adicionando um BreakPoint ao evento de clique do botão consultar e veja se o erro ocorre na seguinte linha:

    drow = ds.Tables[0].Rows.Find(n);

    Fazendo com que caia no catch exibindo a mensagem "Dados inválidos"

    Caso este realmente seja o problema, basta que você carregue o dataSet (ds) antes que seus valores sejam utilizados, fazendo a chamada ao metodo carregaDados a partir do evento de clique do botão consultar assim como é feito no clique do botao de cadastrar, ou simplesmente centralizando a carga do dataset no load do formulário.

    Caso não consiga identificar que este seja o problema adicione um breakPoint no evento clique do botão cancelar e nos informe em qual linha está acontecendo o erro.

    Só mais uma informação é que o metodo Find só encontrará o registro caso exista a chave primária, mas como logo me seguida você verifica se o DataRow é diferente de null não parece estar ai o problema.

     Espero ter ajudado


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    sexta-feira, 5 de novembro de 2010 10:33
  • Fabricio,

    Troca o que está nas últimas linhas:

    catch
    {
       MessageBox.Show("Dados inválidos.");
    }
    
    

    e troca por:

    catch(Exception ex)
    {
       throw new Exception("Dados inválidos.", ex);
    }
    
    
    Não é a resolução do seu problema, mas com certeza ajuda a resolver.
    Samuel Fabel
    sexta-feira, 5 de novembro de 2010 17:25