A cadeia de caracteres de entrada nao estava em um formato incorreto

BoA tarde preciso de uma ajuda!
estou desenvolvendo um aplicacao em tres camadas mais esta ocorrendo um errro ao salvar outros tipos de dados que nao seja do tipo string! segue abaixo o codigo!

//Camada dados Medoto inserir produto!

    public string Inserir(Dproduto Produto)
    {
        string resp = "";

        SqlConnection SqlCon = new SqlConnection();
        try
        {
            //codigo 
            SqlCon.ConnectionString = ConexaoBd.Cn;
            SqlCon.Open();

            SqlCommand SqlCmd = new SqlCommand();
            SqlCmd.Connection = SqlCon;
            SqlCmd.CommandText = "spinserir_produto";
            SqlCmd.CommandType = CommandType.StoredProcedure;

            SqlParameter ParId = new SqlParameter();
            ParId.ParameterName = "@codigo";
            ParId.SqlDbType = SqlDbType.Int;
            ParId.Direction = ParameterDirection.Output;
            SqlCmd.Parameters.Add(ParId);




            //nome
            SqlParameter ParNome = new SqlParameter();
            ParNome.ParameterName = "@nome";
            ParNome.SqlDbType = SqlDbType.VarChar;
            ParNome.Size = 20;
            ParNome.Value = Produto.nome;
            SqlCmd.Parameters.Add(ParNome);

            //finalidade
            SqlParameter ParFinalidade = new SqlParameter();
            ParFinalidade.ParameterName = "@finalidade";
            ParFinalidade.SqlDbType = SqlDbType.VarChar;
            ParFinalidade.Size = 50;
            ParFinalidade.Value = Produto.finalidade;
            SqlCmd.Parameters.Add(ParFinalidade);

            //Unidade
            SqlParameter ParUnidade = new SqlParameter();
            ParUnidade.ParameterName = "@unidade";
            ParUnidade.SqlDbType = SqlDbType.VarChar;
            ParUnidade.Size = 50;
            ParUnidade.Value = Produto.unidade;
            SqlCmd.Parameters.Add(ParUnidade);


            //CATEGORIA
            SqlParameter ParIdCategoria = new SqlParameter();
            ParIdCategoria.ParameterName = "@id_categoria";
            ParIdCategoria.SqlDbType = SqlDbType.Int;
            ParIdCategoria.Value = Produto.idCategoria;
            SqlCmd.Parameters.Add(ParIdCategoria);


            //FORNECEDOR
            SqlParameter ParIdFornecedor = new SqlParameter();
            ParIdFornecedor.ParameterName = "@id_fornecedor";
            ParIdFornecedor.SqlDbType = SqlDbType.Int;
            ParIdFornecedor.Value = Produto.idFornecedor;
            SqlCmd.Parameters.Add(ParIdFornecedor);


            SqlParameter ParPrecoVenda = new SqlParameter();
            ParPrecoVenda.ParameterName = "@valor";
            ParPrecoVenda.SqlDbType = SqlDbType.Money;
            ParPrecoVenda.Size = 40;
            ParPrecoVenda.Value = Produto.valorVenda;
            SqlCmd.Parameters.Add(ParPrecoVenda);


            SqlParameter ParPrecoCompra = new SqlParameter();
            ParPrecoCompra.ParameterName = "@custo";
            ParPrecoCompra.SqlDbType = SqlDbType.Money;
            ParPrecoCompra.Size = 40;
            ParPrecoCompra.Value = Produto.valorCusto;
            SqlCmd.Parameters.Add(ParPrecoCompra);


            SqlParameter ParQuantidade = new SqlParameter();
            ParQuantidade.ParameterName = "@quantidade";
            ParQuantidade.SqlDbType = SqlDbType.Int;
            ParQuantidade.Value = Produto.quantidade;
            SqlCmd.Parameters.Add(ParQuantidade);

            


            //Executar

            resp = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : "Registro Não Foi Inserido!";

        }
        catch (Exception ex)
        {
            resp = ("Erro ao inserir" + ex.Message);
        }

        finally
        {
            if (SqlCon.State == ConnectionState.Open) SqlCon.Close();
        }

        return resp;
    }

//Camada negocio metodo inserir

    public static string Inserir(string nome,
             string finalidade, string unidade, int idCategoria, int idFornecedor,
            decimal valorVenda, decimal valorCusto, int quantidade)
            
    {

        Dproduto Obj = new CamadaDados.Dproduto();


      
        Obj.Nome = nome;
        Obj.Finalidade= finalidade;
        Obj.Unidade = unidade;
        Obj.IdCategoria = idCategoria;
        Obj.IdFornecedor = idFornecedor;
        Obj.ValorVenda = valorVenda;
        Obj.ValorCusto = valorCusto;
        Obj.Quantidade = quantidade;
        


        return Obj.Inserir(Obj);
    }

//Botao Salvar do meu formulario

private void btn_salvar_Click(object sender, EventArgs e)

    {

        try
        {

            string resp = "";
            if (this.txtNome.Text == string.Empty)
            {

                MensagemErro("Preencha todos os campos!");
                errorIcone.SetError(txtNome, "Insira o nome!");

}
            else
            {
                if (this.eNovo)
                {


                    resp = Nproduto.Inserir(this.txtNome.Text, this.cbMarca.Text, this.cbUnidade.Text, Int32.Parse(this.txtCategoria.Text),
                      Int32.Parse(this.txtFornecedor.Text),decimal.Parse(this.txtValor.Text),
                      decimal.Parse(this.txtCusto.Text), Int32.Parse(this.txtEstoque.Text));


            }    }

//mensagem de Erro

O erro está sendo causado devido o código estar tentando converter um tipo bool para Decimal.
Sem o Debug/BreakPoint e a parte do código onde o erro está sendo mostrado fica difícil identificar, verifique se no banco de dados os tipos estão iguais ao do seu objeto Produto. E execute um Debug com BreakPoint.