none
Problema com metodo insert na classe RRS feed

  • Pergunta

  • Ae galera!

    To com um probleminha na classe conexao que criei..

    no metodo Insert ta assim:

     

       public void Insert(string query)
            {
                try
                {
                    sqlQuery = query;
                    cmd = new SqlCommand(sqlQuery, conn);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Inserido com sucesso!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao inserir, consulte mais detalhes abaixo:\n" + ex.Message);
                }
            }

     

    E na classe cadProdutos

     

      private void btnCadastrar_Click(object sender, EventArgs e)
            {
                Conexao.conecta();
                cmdInsert = "INSERT INTO Produtos(Código,Nome,CódigoFornecedor,Preço,Estoque) values (@Código,@Nome,@CódigoFornecedor,@Preço,@Estoque)";
                Conexao.Insert(cmdInsert);
                Conexao.cmd.Parameters.AddWithValue("@Código", txtCodigo.Text);
                Conexao.cmd.Parameters.AddWithValue("@Nome", txtNome.Text);
                Conexao.cmd.Parameters.AddWithValue("@CódigoFornecedor", txtCodFornecedor.Text);
                Conexao.cmd.Parameters.AddWithValue("@Preço", txtPreco.Text);
                Conexao.cmd.Parameters.AddWithValue("@Estoque", txtCodigo.Text);
            }

     

    O problema está na hora de adicionar os parametros, pois os parametros deveriam ser adicionados antes de executar o cmd.ExecuteNonQuery();

    eu ate poderia trabalhar desse jeito

         cmdInsert = "INSERT INTO Produtos(Código,Nome,CódigoFornecedor,Preço,Estoque) values (""+Código+""+Nome+""+CódigoFornecedor+""+Preço+""+Estoque)";


    mas aew estaria sujeito a SqlInjection...        

    E nao adianta eu por paramentros para o Metodo INSERT pq teria q criar um metodo INSERT para cada tabela q eu criar ..

    e se eu por o cmd.ExecuteNonQuery() no evento btnCadastrar_Click(object sender, EventArgs e) nao vai aparecer o erro quando eu cadastrar produtos iguais

    alguem tem alguma soluçao??

    quinta-feira, 16 de setembro de 2010 23:34

Respostas

Todas as Respostas

  • Existem algumas soluções possíveis.

     

    Uma boa seria ir mais afundo no problema e usar a Enterprise Library da microsoft para acesso a dados.

     

    Neste momento eu acho que o que poder ser mais simples é seu método insert receber um command ao invés de uma string ficaria assim. 

     

    private void btnCadastrar_Click(object sender, EventArgs e)
            {
                Conexao.conecta();
                cmdInsert = "INSERT INTO Produtos(Código,Nome,CódigoFornecedor,Preço,Estoque) values (@Código,@Nome,@CódigoFornecedor,@Preço,@Estoque)";
                DbCommand cmd =  Conexao.MontaComando(cmdInsert);
                cmd.Parameters.AddWithValue("@Código", txtCodigo.Text);
                cmd.Parameters.AddWithValue("@Nome", txtNome.Text);
                cmd.Parameters.AddWithValue("@CódigoFornecedor", txtCodFornecedor.Text);
                cmd.Parameters.AddWithValue("@Preço", txtPreco.Text);
                cmd.Parameters.AddWithValue("@Estoque", txtCodigo.Text);

    Conexao.Insert(cmd);


            }

     

    public DbCommand MontaComando(string sqlQuery)

    {

       return new SqlCommand(sqlQuery) ;

    }

     public void Insert(SqlCommand cmd)
            {
                try
                {
                    cmd.connection =  conn;
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Inserido com sucesso!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao inserir, consulte mais detalhes abaixo:\n" + ex.Message);
                }
            }

    Se resolveu marque.

     

    []


    Luciano Almeida MCAD / MCSD .NET
    sexta-feira, 17 de setembro de 2010 01:28
  • Eae Luciano, valeu pela ajuda...mas está dando erro:

     

    Error    5    'System.Data.Common.DbParameterCollection' does not contain a definition for 'AddWithValue' and no extension method 'AddWithValue' accepting a first argument of type 'System.Data.Common.DbParameterCollection' could be found (are you missing a using directive or an assembly reference?)

                cmd.Parameters.AddWithValue("@Código", txtCodigo.Text);
                cmd.Parameters.AddWithValue("@Nome", txtNome.Text);
                cmd.Parameters.AddWithValue("@CódigoFornecedor", txtCodFornecedor.Text);
                cmd.Parameters.AddWithValue("@Preço", txtPreco.Text);
                cmd.Parameters.AddWithValue("@Estoque", txtCodigo.Text);

     

    usando o DbCommand nao tem o metodo AddWithValue

     

     

    sexta-feira, 17 de setembro de 2010 05:06
  • Mude todo lugar que está com DbCommand para SqlCommand assim vai funcionar.

     

    []


    Luciano Almeida MCAD / MCSD .NET
    sexta-feira, 17 de setembro de 2010 05:09