PROBLEMA DA ASPA SIMPLES
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?
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?
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
E como seria essa forma parametrizada? Dê um exemplo por favor
[ô][ô][ô] <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.
[ô][ô][ô] **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.
Use parâmetros na SQL em vez de concatenar valores que isso não acontece, você vai poder aceitar qualquer caractere sem nenhum problema.
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();
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.
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