SUSPENDER CONSULTA A BANCO DE DADOS

PLUGSOFTSM 10/10/2015 09:08:52
#452402
Pessoal...
Preciso ver se alguém pode me ajudar

Tenho um formulário de consultas a banco de dados que, a medida em que vou digitando, aparecem todos os produtos cujo nome iniciem, ou contenham os caracteres desejados.
Acontece que muitas vezes os clientes digitam um único caracter ou vários, dependendo do nível de filtragem desejado. Como tenho clientes com banco de dados com mais de 40 mil registros de produtos cadastrados, a filtragem fica lenta quando poucos caracteres

Uso o Sql Server 2008 como Banco de Dados

Resolvi o problema criando uma thread que roda em segundo plano e que vai montando a lista ao passo que o usuário vai digitando, que resolveu parcialmente o meu problema
Preciso ver se alguém conhece um modo de abortar uma consulta bo Banco de Dados, antes dela retornar um resultado

Exemplo: o usuário digita o M e imediatamente inicia a consulta ao Banco. Em seguida ele digita o A e a minha thread ainda está consultado o M. Como o texto é MA e não M, gostaria de abortar a consulta ao caracter M no BD e passar a consultar MA e assim sucessivamente

Segue um exemplo de como uso

Dim St as string = [ô]M[ô]

Using ConDB as sqlconnection = new sqlconnection(Minha Conexão)
ConDB.Open
Using RstCmd as sqlcommand = new sqlcommand([Ô]Select Codigo, Nome, UN, Preco from Produtos where Nome Like [ô][Ô] & st & [Ô]%[ô] order by Nome[Ô],Condb)
Using Rst as SqlDataReader = RstCmd.ExecuteReader [ô]Aqui o Sistema está consultando o Banco de Dados e nesse meio tempo o usuário já dígitou A e a consulta
[ô]ainda não terminou. Gostaria de abandonála e reiniciar consultando [ô]MA[ô] e assim sucessivamente
[ô]Aqui uso os dados retornados
End Using
end Using
End Using

Gratos se alguém puder me ajudar
NILSONTRES 10/10/2015 10:50:11
#452414
Friamente, Qual a necessidade do usuário digitar um único caracter em um banco de 40 gb ?
Então eu fiz o seguinte em um caso semelhante, a consulta só inicia a partir do 3 caracter digitado, ajuda muito.
Pode não resolver seu caso, mas vai a dica.
JABA 10/10/2015 13:23:00
#452417
Você pode diminuir a quantidade de registro que vem nas consultas usando [Ô]TOP[Ô]

Ex: Select Top 10 * from Tabela
NICKOSOFT 10/10/2015 15:19:51
#452419
no textchange pq não aborta a thread? e reinicia então
fora as 2 sugestões passadas q combinadas imagino serem perfeitas....
KERPLUNK 10/10/2015 22:47:09
#452431
Resposta escolhida
O maior erro da maioria é pensar que o uso de uma thread vai resolver. Na maioria dos casos, não vai, principalmente no seu. A consulta ao banco, após disparada, não vai parar. Você pode até parar a thread mas a consulta vai estar sendo executada. Como seu banco de dados é SQL Server, dependendo da versão(2012 ou mais novo), você pode definir o offset:

SELECT * FROM Tabela ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;


Notas:
Se você for usar o offset, a cláusula ORDER BY deve ser especificada
Offset não pode ser combinado com TOP
Se seu banco for anterior ao 2012 então a sua saída é usar o TOP
PLUGSOFTSM 12/10/2015 09:14:22
#452440
Realmente.... Eu abortei a thread e a consulta ao Banco de Dados não parou

Pensei que pudesse haver algum modo de abortar a consulta

Agradeço as dicas e vou ver testar as sugestões aqui para ver o que me retorna a melhor performance

Agradeço a ajuda
CLEVERTON 12/10/2015 15:29:35
#452442
PQ vc não dispara a consulta somente quando o cara digitar ENTER ?

e se vc precisa de todos esses reigistros sendo filtrados a todo tempo, eu carregaria numa datatable a tabela e faria filtros, bem mais rápido.
enfim, cada caso é um caso.
FOXMAN 13/10/2015 10:54:05
#452447
Eu utilizo uma combinação do que os amigos postaram.
No meu caso eu inicio a busca a partir do 3º caracter e tabelas que não contenham tantos registros(clientes, categorias, etc).
Para produtos eu utilizo um datatable e o usuário digita o termo e pressiona ENTER.

PLUGSOFTSM 27/10/2015 20:35:42
#453178
Amigos. Resolvi meu problema da seguinte maneira:

Defini um limite de 500 registros para a consulta e o sistema ficou bem rápido...
Analisando, percebi que nenhum usuário rola uma tela com tantos registros para encontrar o desejado. nesse caso ele acaba digitando mais caracteres....
Ficou bem legal... isso que clientes meus fazem acesso remoto ao banco via internet

agradeço a ajuda de todos
Tópico encerrado , respostas não são mais permitidas