Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ZecaLoteiro

Apóstrofe (Aspas Simples) com SQL ?!?!?

Recommended Posts

Olá, estou com problemas no campo "NOME" em meu projeto....

Pois quando se é digitado algum nome com " ' " (aspas simles ou apóstrofe, Ex: Joana D'arc) ele apresenta erro na hora de incluir no banco de dados.

 

Apresenta o seguinte erro:

 

<div class='codetop'>CODE</div><div class='codemain' style='height:300px;white-space:pre;overflow-y:auto'>OleDBException was Unhandled

 

Erro de sintaxe (operador faltando) na expressão de consulta ''Joana D'arc', ENDERECO = 'Rua das Monções'.</div>

 

Alguem pode me ajudar a resolver isso ?!

 

Thaanx !!!

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro ocorre porque voce esta mexendo no comando sql, por exemplo:

"SELECT nome FROM clientes WHERE sobrenome= ' " & variavel & " ' "

Quando sobrenome tiver aspas simples fica:

"SELECT nome FROM clientes WHERE sobrenome= ' D'agua ' " como pode ver o sobrenome entao acaba em D, o agua' fica fora de contexto e gera o erro, isso eh serio, uma pessoa pode colocar sobrenome= ' (drop table clientes) --' o comando fica:

"SELECT nome FROM clientes WHERE sobrenome= ' ' (drop table clientes) --'' ", ou seja, tchau tabela.

 

Para resolver isso usam-se parametros:

Se voce estiver usando MSSQL voce cria uma procedure para armazenar os valores (INSERT INTO clientes values (@nome,@sobenome) , isso com as variaveis declaradas.)

Entao no vb.net:

 

abra a conexao
dim cmd as new SqlComand
cmd.connection = suaconexao
cmd.CommandType = CommandType.StoredProcedure 
cmd.CommandText = "dbo.nomedaprocedure"
cmd.Parameters.add("@nome")	  (se nao me engano da para fazer: cmd.Parameters.add("@nome",valor)) 
cmd.Parameters.add("@sobrenome")
cmd.Parameters(nome).value= sua variavel de nome
cmd.Parameters(sobrenome).value= sua variavel de sobrenome

cmd.executeNonQuery() (pode usar um if aqui para verificar se deu certo)

Isso tudo deixa muito seguro, mas se quiser utilizar um metodo alternativo (gambiarra), voce substitui ' (aspas simples) por um acento ou algo do tipo (`)

variavel.Replace("'","`")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brigadão...

 

A gambiarra resolveu parcialmente meu problema, mas não consegui implementar os procedures :(

Devo criar o procedure antes ? no banco ?!

Ou só incluir esse código direto no programa ?!

 

Tentei incluir direto no programa e não consegui :(

Poderia me ajudar com mais material sobre procedure ?!

Plz ?!

Valew !

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.