none
Erro na Sintaxe MySQL RRS feed

  • Pergunta

  •  Pessoal, estou com problema na hora do INSERT na tabela cliente;

    Apos povoar os formularios ao clicar no botao pra inserir no banco volta esta mensagem:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''01.000.110-0','(19)92100-1010','33.465-000','Rua Jair Ventura, 123','Santa Rosa' at line 2

    Revisei as tabelas e não consegui em momento algum resolver esse problema. Abaixo segue a string sql:

    String comando = @"INSERT INTO gerenciador.cliente(nome, email, nascimento, cpf_cnpj_cliente, rg_ie_cliente, sexo, telefone, 
                cep, logradouro, bairro, cidade, estado, pais) VALUES('"+nome+"','"+email+"','"+nascimento+"','"+cpf+"','"+rg+"'," +
                "'"+sexo+"','"+telefone+"','"+cep+"','"+logradouro+"','"+bairro+"','"+cidade+"','"+estado+"','"+pais+"');";

    sábado, 24 de março de 2018 18:21

Respostas

Todas as Respostas

  • Acredito que antes de telefone tem o sexo que acredito que seja um valor booleano ou algo que defina se é masculino ou feminino e na mensagem de erro mostra um dado diferente antes do telefone, observe:

    ''01.000.110-0','(19)92100-1010','33.465-000','Rua Jair Ventura, 123','Santa Rosa' 

    sábado, 24 de março de 2018 19:33
  • Boa noite.

    Costumo colocar espaços entre os dados a serem inseridos (talvez não seja realmente necessário).

    Como o colega Jussi Araujo citou, o campo sexo está sendo tratado corretamente?

    Outro conselho é trabalhar com parâmetros, para evitar injeção sql.

            String comando = @"INSERT INTO gerenciador.cliente(nome, email, nascimento, cpf_cnpj_cliente, rg_ie_cliente, sexo, telefone, cep, logradouro, bairro, cidade, estado, pais) VALUES('"+nome+"', '"+email+"', '"+nascimento+"', '"+cpf+"', '"+rg+"', '"+sexo+"', '"+telefone+"', '"+cep+"', '"+logradouro+"', '"+bairro+"', '"+cidade+"', '"+estado+"', '"+pais+"');";


    MARIANO1776


    • Editado Mariano1776 domingo, 25 de março de 2018 00:30
    sábado, 24 de março de 2018 21:45
  • O atributo sexo esta declarado na tabela como enum(M,F), no C# declarei e estou enviando como string.

    Possivelmente o erro está aí! Vou verificar!

    Obrigado por enquanto!

    domingo, 25 de março de 2018 01:15
  • Creio que seja o que o amigo Jussi tenha acertado. Então amigo o injetor é feito por parametros, criei uma classe com metodos que recebem os atributos a serem inseridos. No evento click do botão passo os dados do formulario  como parametros do metodo da classe instanciada.

    Valeu amigo.

    Vou verificar e informo a voces a correção.

    Obrigado!

    domingo, 25 de março de 2018 01:19
  • mudei o tipo do atributo sexo e o erro continuou.

    tabela:

    create table cliente(
    nome varchar(100) not null,
    email varchar(50),
    nascimento date, 
    cpf_cnpj_cliente char(18) primary key unique not null,
    rg_ie_cliente char(13),
    sexo enum('M','F'),
    telefone char(14) not null,
    cep char(10),
    logradouro  varchar(100) not null,
    bairro varchar(50) not null,
    cidade varchar(50) not null,
    estado char(2) not null default 'SP',
    pais varchar(30) not null default 'Brasil',
    foreign key(cpf_cnpj_cliente) references venda(cpf_cnpj_comprador)
    )default charset = utf8;

    Método injetor:

           public void CadastrarClienteCPF(String nome, String email, String cpf, String nascimento, String rg, String sexo,
               String telefone, String cep, String logradouro, String bairro, String cidade, String estado, String pais)
            {
                String comando = @"INSERT INTO gerenciador.cliente(nome, email, nascimento, cpf_cnpj_cliente, rg_ie_cliente, sexo, telefone, 
                cep, logradouro, bairro, cidade, estado, pais) VALUES('"+nome+"','"+email+"','"+nascimento+"','"+cpf+"','"+rg+"'," +
                "'"+sexo+"','"+telefone+"','"+cep+"','"+logradouro+"','"+bairro+"','"+cidade+"','"+estado+"','"+pais+"');";

                String resultado = Conn.ExecutaComandos(comando);
                if (resultado.Equals("Ok"))
                {
                    message = "Cliente cadastrado com sucesso.";
                }
                else
                {
                    message = resultado;
                }
            }

    Evento Botao:

         try
                    {                    
                        cliente.CadastrarClienteCPF(txtNome_Rs.Text, txtEmail.Text,  txtNascimento.Text, txtCpf_Cnpj.Text,
                        txtRg_Ie.Text, DdlSexo.SelectedValue, txtTelefone.Text, txtCep.Text, txtLogradouro.Text, txtBairro.Text,
                        txtCidade.Text, ddlEstado.SelectedValue, txtPais.Text);

                    }catch(Exception erro)
                    {
                        lblMessage.Text = Convert.ToString(erro);
                    }
                    finally
                    {
                       lblMessage.Text =  Cliente.message;
                    }
                }

    Menssagem de erro SQL


    domingo, 25 de março de 2018 01:41
  • Se de acordo, troque enum por char.

    Veja este link:

    https://pt.stackoverflow.com/questions/81801/qual-a-vantagem-em-usar-o-tipo-enum


    MARIANO1776

    domingo, 25 de março de 2018 02:04
  • resolveu valeu
    domingo, 25 de março de 2018 03:45