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

.NET

15/11/2014

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

Curtidas 0

Respostas

Fábio Carvalho

Fábio Carvalho

15/11/2014

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);
GOSTEI 0
Soeuseijothaz

Soeuseijothaz

15/11/2014

Faça este teste:

   cmd.Parameters.AddWithValue("@nmproduto", lblNomePeca.Text.ToString());
   cmd.Parameters.AddWithValue("@preco", lblPreco.Text.ToString());
GOSTEI 0
Fábio Carvalho

Fábio Carvalho

15/11/2014

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
GOSTEI 0
Soeuseijothaz

Soeuseijothaz

15/11/2014

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?
GOSTEI 0
Fábio Carvalho

Fábio Carvalho

15/11/2014

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.
GOSTEI 0
Soeuseijothaz

Soeuseijothaz

15/11/2014

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............

GOSTEI 0
Fábio Carvalho

Fábio Carvalho

15/11/2014

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.
GOSTEI 0
Soeuseijothaz

Soeuseijothaz

15/11/2014

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.
GOSTEI 0
Fábio Carvalho

Fábio Carvalho

15/11/2014

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.
GOSTEI 0
Fábio Carvalho

Fábio Carvalho

15/11/2014

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!
GOSTEI 0
Soeuseijothaz

Soeuseijothaz

15/11/2014

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.
GOSTEI 0
Fábio Carvalho

Fábio Carvalho

15/11/2014

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.
GOSTEI 0
POSTAR