PROBLEMA DA ASPA SIMPLES

ALEXPASSOS 17/04/2013 18:01:59
#422086
Olá

Um problema que sempre tive no meu sistema é as aspas digitadas pelos usuários nos campos de cadastro.

Exemplo: Arraial D[ô]Ajuda - quando digita esse nome sempre dar erro.... ai tenho que ficar dizendo que o sistema não aceita aspas.

E ainda não achei a melhor soluções para isso.

Como vocês estão contornando esse problema?
KERPLUNK 17/04/2013 18:26:47
#422087
Simples, use comandos ADO parametrizados, é o melhor caminho. Mas se quiser uma mudança que requer menos esforço, apesar de não correta, substitua a aspa simples por aspas simples duas vezes aspas:

dim nome as string
nome = Replace(txtNome.Text, [Ô][ô][Ô], [Ô][ô][ô][Ô])
sql = [Ô]Insert Into.........[Ô] & nome

ALEXPASSOS 17/04/2013 18:38:26
#422090
E como seria essa forma parametrizada? Dê um exemplo por favor
NILSONTRES 17/04/2013 20:35:50
#422101
[ô][ô][ô] <summary>
[ô][ô][ô] **FORMATA VALORES
[ô][ô][ô] </summary>
[ô][ô][ô] <param name=[Ô]VVALOR[Ô]>O Valor a Formatar</param>
[ô][ô][ô] <param name=[Ô]VTIPO[Ô]>1=Moeda 2=CNPJ 3=CEP 4=FONE 5=Apostrofe 6=Insc Estadual 7=Decimal com Virgula 8=Valor para NFE 4 Dig 9=Valor para NFE 3 Dig</param>
[ô][ô][ô] <returns></returns>
[ô][ô][ô] <remarks></remarks>
Public Function Format_Valor(ByVal VVALOR As String, ByVal VTIPO As Integer) As String
Format_Valor = VVALOR
Select Case VTIPO
Case 1 [ô]MOEDA
Format_Valor = Replace(VVALOR, [Ô].[Ô], [Ô][Ô])
Format_Valor = Replace(Format_Valor, [Ô],[Ô], [Ô].[Ô])
Case 2 [ô]CNPJ
Format_Valor = Replace(VVALOR, [Ô].[Ô], [Ô][Ô])
Format_Valor = Replace(Format_Valor, [Ô]/[Ô], [Ô][Ô])
Format_Valor = Replace(Format_Valor, [Ô]-[Ô], [Ô][Ô])
Case 3 [ô]CEP
Format_Valor = Replace(VVALOR, [Ô]-[Ô], [Ô][Ô])
Case 4 [ô]FONE
Format_Valor = Replace(VVALOR, [Ô]([Ô], [Ô][Ô])
Format_Valor = Replace(Format_Valor, [Ô])[Ô], [Ô][Ô])
Format_Valor = Replace(Format_Valor, [Ô]-[Ô], [Ô][Ô])
Case 5 [ô]APOSTROFE
Format_Valor = Replace(VVALOR, [Ô][ô][Ô], [Ô][ô][ô][Ô])
Case 6 [ô]INSCRIÇÃO ESTADUAL
Format_Valor = Replace(VVALOR, [Ô].[Ô], [Ô][Ô])
Case 7 [ô]DECIMAL COM VIRGULA
Format_Valor = Replace(VVALOR, [Ô].[Ô], [Ô],[Ô])
Case 8 [ô]4 DIGITOS APÓS O PONTO, PARA NFE
[ô]Format_Valor = FormatNumber(VVALOR, 4)
Format_Valor = FormatNumber(VVALOR, 4)
Format_Valor = Replace(Format_Valor, [Ô].[Ô], [Ô][Ô])
Format_Valor = Replace(Format_Valor, [Ô],[Ô], [Ô].[Ô])
Case 9 [ô]3 DIGITOS APÓS O PONTO, PARA NFE
Format_Valor = FormatNumber(VVALOR, 3)
Format_Valor = Replace(Format_Valor, [Ô],[Ô], [Ô].[Ô])
End Select

End Function

[ô]a chamada:Format_Valor(TXT_LOGRADOURO.Text.Trim, 5)

Ta ai, Apostrofe e outras cocitas mas.
OCELOT 17/04/2013 22:56:42
#422105
Resposta escolhida
Use parâmetros na SQL em vez de concatenar valores que isso não acontece, você vai poder aceitar qualquer caractere sem nenhum problema.
LUIS.HERRERA 18/04/2013 15:11:24
#422139
Quer dizer que só fazendo o código abaixo, se eu incluir as aspas simples no texto do campo Descrição, o framework não causará problema no SQL? O que ele faz para incluir as aspas simples no texto sem causar problema?

                AbrirConexao();
string sql = [Ô]UPDATE ATITUDES SET ATITUDE = @DESCRICAO, IDIOMA = @IDIOMA,INATIVO = @INATIVO WHERE (ID = @ID);[Ô];
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
// parâmetros do comando (campos da tabela)
cmd.Parameters.Add([Ô]@ID[Ô], SqlDbType.Int);
cmd.Parameters[[Ô]@ID[Ô]].Value = atitude.ID;
cmd.Parameters.Add([Ô]@DESCRICAO[Ô], SqlDbType.NVarChar);
cmd.Parameters[[Ô]@DESCRICAO[Ô]].Value = atitude.DESCRICAO;
cmd.Parameters.Add([Ô]@IDIOMA[Ô], SqlDbType.NChar);
cmd.Parameters[[Ô]@IDIOMA[Ô]].Value = atitude.IDIOMA;
cmd.Parameters.Add([Ô]@INATIVO[Ô], SqlDbType.Bit);
cmd.Parameters[[Ô]@INATIVO[Ô]].Value = atitude.INATIVO;
cmd.ExecuteNonQuery();
KERPLUNK 18/04/2013 15:39:10
#422140
Citação:

:
Quer dizer que só fazendo o código abaixo, se eu incluir as aspas simples no texto do campo Descrição, o framework não causará problema no SQL? O que ele faz para incluir as aspas simples no texto sem causar problema?

                AbrirConexao();
string sql = [Ô]UPDATE ATITUDES SET ATITUDE = @DESCRICAO, IDIOMA = @IDIOMA,INATIVO = @INATIVO WHERE (ID = @ID);[Ô];
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
// parâmetros do comando (campos da tabela)
cmd.Parameters.Add([Ô]@ID[Ô], SqlDbType.Int);
cmd.Parameters[[Ô]@ID[Ô]].Value = atitude.ID;
cmd.Parameters.Add([Ô]@DESCRICAO[Ô], SqlDbType.NVarChar);
cmd.Parameters[[Ô]@DESCRICAO[Ô]].Value = atitude.DESCRICAO;
cmd.Parameters.Add([Ô]@IDIOMA[Ô], SqlDbType.NChar);
cmd.Parameters[[Ô]@IDIOMA[Ô]].Value = atitude.IDIOMA;
cmd.Parameters.Add([Ô]@INATIVO[Ô], SqlDbType.Bit);
cmd.Parameters[[Ô]@INATIVO[Ô]].Value = atitude.INATIVO;
cmd.ExecuteNonQuery();



Exatamente! Além dessa vantagem, você evita SQL Injection, erros de concatenação e simplifica o código.
OCELOT 18/04/2013 16:02:48
#422142
Citação:

:
Quer dizer que só fazendo o código abaixo, se eu incluir as aspas simples no texto do campo Descrição, o framework não causará problema no SQL? O que ele faz para incluir as aspas simples no texto sem causar problema?



Quando você usa parâmetros eles são tratados de forma especial, ele sabe que todo o valor que estiver dentro do parâmetro é apenas valor e nunca vai ser interpretado como um comando SQL independente do que tiver nele, e ele ainda trata os valores no tipo correto, se você passar um DateTime para o parâmetro ele nunca vai dar problema de inverter dia e mês ou um valor numérico se passado como float, double ou decimal ele nunca vai dar problema com as casas decimais por causa da configuração de sistema dizendo que usa ponto ou virgula, entre outras coisas
Tópico encerrado , respostas não são mais permitidas