ASPAS SIMPLES NO BINDING SOURCE

DAMASCENO.CESAR 26/05/2017 15:02:59
#474199
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
DS2T 26/05/2017 16:41:17
#474201
Resposta escolhida
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!
DAMASCENO.CESAR 29/05/2017 15:22:02
#474243
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