Inserir com problema. Asp.Net (Upgrade da Concessionária)

15/11/2014

0

Fala galera, tudo bem?

Eu estou dando um up no programa da Concessionária do curso de formação básica de asp aqui do portal, hoje cedo estava tudo funcionando normalmente no código que mostrarei abaixo, mas não sei por qual motivo o código simplesmente parou de inserir o nome do produto e o valor na tabela. Segue abaixo os códigos.

Esse código busca os dados da peça que foi clicado anteriormente em uma outra pagina, ele funciona corretamente.

 protected void Page_Load(object sender, EventArgs e)
    {

        string strCon = ConfigurationManager.ConnectionStrings["carmediaConnectionString"].ConnectionString;
        string SQL = "select * from pecas where id = @id";
        string ID = Request.QueryString["id"];

        using(MySqlConnection con = new MySqlConnection(strCon)){
        
            using (MySqlCommand cmd = new MySqlCommand(SQL, con)){
                con.Open();
                if (con.State == System.Data.ConnectionState.Open)
                {
                    cmd.Parameters.AddWithValue("@id", Convert.ToInt32(ID));

                    MySqlDataReader dr = cmd.ExecuteReader();

                    if (dr.Read()) {

                        txtDescricao.Text = dr["descricao"].ToString();
                        lblMarca.Text = dr["Marca"].ToString();
                        lblPreco.Text = dr["preco"].ToString();
                        lblNomePeca.Text = dr["nome"].ToString();
                        lBtnComprar.PostBackUrl = "Interesse_pecas.aspx?pecas=" + dr["descricao"].ToString() + " " + dr["marca"].ToString();
                        imgHlCarro.ImageUrl = "../Marcas/" + dr["marca"].ToString() + ".jpg";
                        imgHlCarro.NavigateUrl = "../Marcas/" + dr["marca"].ToString() + ".jpg";
                        imgHlCarro.Attributes.Add("rel", "lightbox");
                    }
                }
            }
        }

    }



Em seguida eu utilizei este outro código para pegar apenas o nome dessa peça e o preço dela e colocar em uma tabela de produtos que tem os campos nome e preço.

rotected void btnCarrinho_Click(object sender, EventArgs e)
    {
        //Chama a conectividade para o banco de dados.
        string strCon = ConfigurationManager.ConnectionStrings["carmediaConnectionString"].ConnectionString;
        string SQL = "INSERT INTO produtos (nmproduto, preco) VALUES ("; SQL += " @nmproduto, @preco)";


        //Configura conexão
        using (MySqlConnection conn = new MySqlConnection(strCon))
        {

            using (MySqlCommand cmd = new MySqlCommand(SQL, conn))
            {
                conn.Open();
                cmd.Parameters.AddWithValue("@nmproduto", lblNomePeca.Text);
                cmd.Parameters.AddWithValue("@preco", lblPreco.Text);

                if (cmd.ExecuteNonQuery() > 0)
                {
                    lblMensagem.Text = "Carro cadastrado com sucesso!";
                }
                else
                {
                    lblMensagem.Text = "Erro ao inserir a peça!";
                }
            }

        }
    }


Mistérios da vida? Este código estava funcionando até cadastrar 3 produtos, depois parou de funcionar! Então excluir a tabela e criei uma nova, mas nada até agora. :(

Alguém pode me ajudar?
Fábio Carvalho

Fábio Carvalho

Responder

Posts

16/11/2014

Fábio Carvalho

Galera, eu sei que meu problema são essas duas linhas que não estão pegando o valor, alguém tem ideia do que seja?

  cmd.Parameters.AddWithValue("@nmproduto", lblNomePeca.Text);
                cmd.Parameters.AddWithValue("@preco", lblPreco.Text);
Responder

16/11/2014

Soeuseijothaz

Faça este teste:

   cmd.Parameters.AddWithValue("@nmproduto", lblNomePeca.Text.ToString());
   cmd.Parameters.AddWithValue("@preco", lblPreco.Text.ToString());
Responder

16/11/2014

Fábio Carvalho

Jothaz,

da esse erro aqui quando tento fazer isso:

The best overloaded method match for 'MySql.Data.MySqlCliente.MySqlParameterCollecion.AddWithValue(string, object)' has come invalid arguments
Responder

16/11/2014

Soeuseijothaz

Jothaz,

da esse erro aqui quando tento fazer isso:

The best overloaded method match for 'MySql.Data.MySqlCliente.MySqlParameterCollecion.AddWithValue(string, object)' has come invalid arguments


Amigo foi mal. É que a muito tempo não uso o MySQL e você deve passar o objeto, no SQL Server você passa um tipo.

Então retire o .ToString().

Retorna algum erro ou só não executa a instrução?

Você já debugou linha a linha e verificou se os valores estão ok?
Responder

16/11/2014

Fábio Carvalho

Jothaz,

da esse erro aqui quando tento fazer isso:

The best overloaded method match for 'MySql.Data.MySqlCliente.MySqlParameterCollecion.AddWithValue(string, object)' has come invalid arguments


Amigo foi mal. É que a muito tempo não uso o MySQL e você deve passar o objeto, no SQL Server você passa um tipo.

Então retire o .ToString().

Retorna algum erro ou só não executa a instrução?

Você já debugou linha a linha e verificou se os valores estão ok?


Tentei debugar aqui colocando o Breaking point no botão nos valores mas passo direto, não to entendendo o que ta acontecendo. Enfim, com .ToString(). Não deu erro, mas também não inseriu ainda.

[Update]
Suspeitando que não foi até o breaking point, eu resolvi fazer um teste e coloquei o botão pra mostrar uma mensagem, mas nem isso funcionou. Vou tentar criar uma classe nova, se eu tiver novidades vou postar aqui.
Responder

16/11/2014

Soeuseijothaz

Insira:
            try
            {
               ...eu código......

            }
            catch (Exception ex)
            {
                throw;
            }


Pois se existir algum erro será capturado, além de ser uma ótima prática.

Outra sugestão:

cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue............

Responder

16/11/2014

Fábio Carvalho

Insira:
            try
            {
               ...eu código......

            }
            catch (Exception ex)
            {
                throw;
            }


Pois se existir algum erro será capturado, além de ser uma ótima prática.

Outra sugestão:

cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue............



Refiz a classe com a sua sugestão do Try Catch, realmente pegou um erro alegando duas conexões, então removi uma. O Debug funcionou agora também, e as labels estão recebendo os valores no botão, porem ainda não inseriu no BD produtos.
Responder

16/11/2014

Soeuseijothaz

Acho que esta faltando é isto:

                conn.Open();
				
				cmd.CommandType = CommandType.Text;
				cmd.CommandText = SQL;	
                
	       cmd.Parameters.AddWithValue("@nmproduto", lblNomePeca.Text);
                cmd.Parameters.AddWithValue("@preco", lblPreco.Text);



Atribiuir o seu SQL para cmd.CommandText, teste e retorne.
Responder

16/11/2014

Fábio Carvalho

kkkkkkkkkkkk

Olha as ideia desse programa, eu coloquei o cmd.ExecuteReader(); depois da função e deu certo! Inseriu 3 vezes! Depois parou de inserir de novo kkkkkkkkkkkkkkkkk não sei se rio ou choro.
Responder

16/11/2014

Fábio Carvalho

Acho que esta faltando é isto:

                conn.Open();
				
				cmd.CommandType = CommandType.Text;
				cmd.CommandText = SQL;	
                
	       cmd.Parameters.AddWithValue("@nmproduto", lblNomePeca.Text);
                cmd.Parameters.AddWithValue("@preco", lblPreco.Text);



Jothaz, deu certo! E inseriu com seu código! Mas aí de novo só deu 3 resultados. Você não vai acreditar o que estava dando errado. Eu só estava testando 3 resultados antes de aplicar o "postbackurl" da interface gráfica do Visual Studio, aí reparei que era sempre depois que eu colocava o postbackurl que parava de inserir, então além de ter colocado o seu código eu tirei o postback da interface gráfica e implementei ele.

Fico assim:


protected void btnInserirProduto_Click(object sender, EventArgs e)
    {

        try
        {
            //Chama a conectividade para o banco de dados.
            string strCon = ConfigurationManager.ConnectionStrings["carmediaConnectionString"].ConnectionString;
            string SQL = "INSERT INTO produtos (nmproduto, preco) VALUES ("; SQL += " @nmproduto, @preco)";


            //Configura conexão
            using (MySqlConnection conn = new MySqlConnection(strCon))
            {
                conn.Open();

                using (MySqlCommand cmd = new MySqlCommand(SQL, conn))
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = SQL;
                    cmd.Parameters.AddWithValue("@nmproduto", lblNomePeca.Text.ToString());
                    cmd.Parameters.AddWithValue("@preco", lblPreco.Text.ToString());
                    cmd.ExecuteReader();
                }

            }
        }
        catch (Exception ex)
        {
            throw;
        }

        btnInserirProduto.PostBackUrl = "~/Cliente/compra_peca.aspx";
    }



E agora deu certo! Muito obrigado Jothaz!
Responder

16/11/2014

Soeuseijothaz

De nada!

Lembre-se, sempre, mas sempre mesmo use o Try Catch, sem ele fica difícil capturar os erros.

Existe o finally do try catch, se vi discussões intermináveis na validade do seu uso, mas pode facilitar a vida, pois só será executado após o fim de tudo que esta no try:

        try
        {
           ......
        }
        catch (Exception ex)
        {
            throw;
        }
        finally
        {
		
        }		


E sempre tenha paciência, pois muitas das vezes o problema é simples, mas nossa ações para saná-lo ,só piora.

Debug é seu melhor companheiro. E o do Visual Studio é top.
Responder

16/11/2014

Fábio Carvalho

De nada!

Lembre-se, sempre, mas sempre mesmo use o Try Catch, sem ele fica difícil capturar os erros.

Existe o finally do try catch, se vi discussões intermináveis na validade do seu uso, mas pode facilitar a vida, pois só será executado após o fim de tudo que esta no try:

        try
        {
           ......
        }
        catch (Exception ex)
        {
            throw;
        }
        finally
        {
		
        }		


E sempre tenha paciência, pois muitas das vezes o problema é simples, mas nossa ações para saná-lo ,só piora.

Debug é seu melhor companheiro. E o do Visual Studio é top.


Ok, muito obrigado mesmo Jothaz! Ao término eu deixo ele aqui pra download.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar