ASPAS SIMPLES NO BINDING SOURCE
Boa tarde, tenho um projeto onde realizo a pesquisa por nomes num binding source, até aÃ, tudo funcionando, menos um pequeno detalhe: se uso o apóstrofo tal como no nome: JOANA D[ô]ARC
o binding source dá esse erro:
[txt-color=#e80000]A expressão contém uma constante de cadeia de caracteres inválida: [ô].[/txt-color]
Sei que a aspas simples (usada com apóstrofo) é usada como delimitador de texto em consultas SQL e até mesmo no binding source
tem como corrigir? mesmo que tenha que refazer todo o código, não há problemas, quero evitar esse erro sem excluir o apóstrofo dos nomes.
Sei que consultas parametrizadas pode-se usar o apóstrofo sem problemas, mas a tabela é muito grande, e filtrar cada vez que se digita uma letra perde-se desempenho. e sim, é necessário filtrar dessa forma: letra a letra
essa é minha linha de filtro: BS.Filter = [Ô]Nome Like [ô][Ô] & TxtNomePesquisa.Text & [Ô]%[ô][Ô]
obrigado a todos
o binding source dá esse erro:
[txt-color=#e80000]A expressão contém uma constante de cadeia de caracteres inválida: [ô].[/txt-color]
Sei que a aspas simples (usada com apóstrofo) é usada como delimitador de texto em consultas SQL e até mesmo no binding source
tem como corrigir? mesmo que tenha que refazer todo o código, não há problemas, quero evitar esse erro sem excluir o apóstrofo dos nomes.
Sei que consultas parametrizadas pode-se usar o apóstrofo sem problemas, mas a tabela é muito grande, e filtrar cada vez que se digita uma letra perde-se desempenho. e sim, é necessário filtrar dessa forma: letra a letra
essa é minha linha de filtro: BS.Filter = [Ô]Nome Like [ô][Ô] & TxtNomePesquisa.Text & [Ô]%[ô][Ô]
obrigado a todos
O desempenho que você vai perder usando parâmetros é mÃnimo, tendo em vista, que o que irá demorar mesmo na consulta, é o processamento de dados por parte do servidor e não no cliente.
Outra dica para um melhor desempenho, é fazer uma indexação bem elaborada. No seu caso, criar um Ãndice não clusterizado para o campo Nome, parece ser uma boa (mas precisaria ver as outras consultas e a estrutura do seu banco)
Outra dica nesse caso, é: antes de realizar a consulta, esperar uns 2 segundos. Porque o que acontece geralmente é a pessoa digitar uma palavra e levar menos de 1 segundo entre uma letra e outra. Aà você acaba carregando uma consulta que nem vai ser mais válida, porque o cliente já digitou mais 2 letras. Aà ele vai passar por outra letra, e apenas depois chegar na consulta que você quer. Manjou?
Caso não queira nada disso, você pode considerar usar:
BS.Filter = [Ô]Nome Like [ô][Ô] & TxtNomePesquisa.Text.Replace([Ô][ô][Ô],[Ô][ô][ô][Ô]) & [Ô]%[ô][Ô]
Ou seja, substituindo aspas simples, por duas aspas simples... você consegue o valor desejado. E ainda te livra de umas encrencas com SQL Injection rs
Abraços!
Outra dica para um melhor desempenho, é fazer uma indexação bem elaborada. No seu caso, criar um Ãndice não clusterizado para o campo Nome, parece ser uma boa (mas precisaria ver as outras consultas e a estrutura do seu banco)
Outra dica nesse caso, é: antes de realizar a consulta, esperar uns 2 segundos. Porque o que acontece geralmente é a pessoa digitar uma palavra e levar menos de 1 segundo entre uma letra e outra. Aà você acaba carregando uma consulta que nem vai ser mais válida, porque o cliente já digitou mais 2 letras. Aà ele vai passar por outra letra, e apenas depois chegar na consulta que você quer. Manjou?
Caso não queira nada disso, você pode considerar usar:
BS.Filter = [Ô]Nome Like [ô][Ô] & TxtNomePesquisa.Text.Replace([Ô][ô][Ô],[Ô][ô][ô][Ô]) & [Ô]%[ô][Ô]
Ou seja, substituindo aspas simples, por duas aspas simples... você consegue o valor desejado. E ainda te livra de umas encrencas com SQL Injection rs
Abraços!
DS2T, testei o replace e funcionou do jeito que eu queria, mas vou montar adequadamente com parâmetros e o tempo de espera, obrigado, e desculpe a demora para responder
Tópico encerrado , respostas não são mais permitidas