Inquiridor
Duvidas em ACCESS para .NET2.0 - Busca em Palavras Chaves

Pergunta
-
Estou para a minha aplicação asp.net criando á seguinte sql
comando
= "Select * from produtos where palavrachave like '%" + palavrachave + "%' and produto like '%" + busca + "%' and catalogo like '%" order by produto";e tenho os seguintes dados no campo palavrachave do meu bd access 2003
dados:Gabinetes, gabinetes, DR-HANK, Dr-Hank, dr-hank, HT3467, ht3467, Todos, Todas, TODOS, TODAS
Onde ao fz a busca já sei que ele me reporta a pesquisa baseado no parametro de separação "," entre um dado e outro da busca qdo eu a faço por ex
palavrachave=ht3
ou
palavrachave=Gabinetes
Agora pergunto como eu poderia fz a mesma pesquisa dessa forma, vindo de dois campos de busca adversos, mas não com parametros separados e sim espaços seria a solução na minha base de dados
palavrachave=ht3 gabinetes
os dados nesse caso do banco para esse tipo de busca teriam que estar assim
Gabinetes, gabinetes, DR-HANK Dr-Hank dr-hank HT3467 ht3467 Todos Todas TODOS TODAS
mas sem o parametro da virgula "," como separador e sim " "
Se alguem pd me ajudar desde já agradeço?
segunda-feira, 16 de julho de 2007 18:38
Todas as Respostas
-
luiz, aqui vao algumas consideracoes a fazer:
- o like é muito lento, mas em alguns casos sei que nao há outra forma.
- procure declarar os parametros na string SQL ao invés de concatenar. do jeito que vc está fazendo é uma porta aberta para hackers. veja dicas em http://www.renatohaddad.com/tips.aspx
cmd.Parameters.AddWithValue
- da forma que vc quer fazer a consulta usando o " " o like nao reconhece e ele irá pesquisar pelo texto todo. eu sugiro voce usar um looping para varrer toda a tabela de forma que a cada chave a ser pesquisada que contenha duas ou mais palavras "HT3 gabinetes", o seu codigo localiza o espaço em branco na expressao, pega o primeiro texto e compara com o campo PalavraChave. faça a mesma coisa com o segundo texto e para os demais, ou seja, a cada espaço em branco vc deve comparar com o PalavraChave.
att.,
renato haddad
terça-feira, 17 de julho de 2007 18:35 -
e como eu poderia fz isso baseado no codigo abaixo, no que se refere a proteção contra hachers, já me falaram tb sobre o uso com splits para palavras chaves estou aprendendo mas ainda não sei como se encaixaria no script abaixo, caso possa me dar um toque já fico grato de ante-mão
using
System;using
System.Data;using
System.Configuration;using
System.Collections;using
System.Web;using
System.Web.Security;using
System.Web.UI;using
System.Web.UI.WebControls;using
System.Web.UI.WebControls.WebParts;using
System.Web.UI.HtmlControls;using
System.Data.OleDb;using
System.Web.Configuration;using
System.Runtime.InteropServices;using
System.Windows.Forms;namespace
catalog{
public partial class _Default : System.Web.UI.Page{
public String provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="; public String banco = @"c:\inetpub\wwwroot\cybersnet\dados\lojavirtual.mdb"; public string comando; protected void Page_Load(object sender, EventArgs e){
//Recupera parâmetros de busca string busca;busca
= (Request["busca"]); string palavrachave;palavrachave
= (Request["palavrachave"]); string pesquisaavancada;pesquisaavancada
= (Request["pesquisaavancada"]); string codigoml;codigoml
= (Request["codigoml"]); string lista;lista
= (Request["lista"]); string concatenacatalogo; string largura; if (pesquisaavancada != string.Empty){
largura
= "650px";}
else{
largura
= "355px";}
//Recupera o Parâmetro da resolução da pagina string paginapixel;paginapixel
= (Request["resolucao"]); //Carrega a Variavel de Tamanho da pagina String tampagina; int tamcount; int tamcoluns; //Response.Redirect("mercadopago.aspx?codigoml=" + codigoml + "&resolucao=" + paginapixel + "&busca=" + busca + "&palavrachave=" + palavrachave + "&pesquisaavancada=" + pesquisaavancada); //Rotina Decisão de Tamanho da Pagina //Mediante Resolução if (paginapixel != "1024"){
Produto
.RepeatColumns = 2;tampagina
= "4";tamcoluns
= 1;}
else{
Produto
.RepeatColumns = 3;tampagina
= "6";tamcoluns
= 2;}
//Cria Controle Iframe via code-behind HtmlControl frame1 = new System.Web.UI.HtmlControls.HtmlGenericControl("iframe");frame1
.Attributes["src"] = "buscatitulo.aspx?palavrachave=" + palavrachave + "&pesquisaavancada=" + pesquisaavancada;frame1
.Attributes["frameborder"] = "0";frame1
.Attributes["scrolling"] = "no";frame1
.Attributes["height"] = "45px";frame1
.Attributes["width"] = largura;frame1
.Attributes["margemwidth"] = "0px";theFrameHolder
.Controls.Add(frame1);concatenacatalogo
= " "; if (lista == String.Empty) concatenacatalogo = " "; if (lista == "nv") { concatenacatalogo = concatenacatalogo + " and autorizarnovidades = true "; }{
//String qry = "Select * from produtos where palavrachave like '%" + palavrachave.Replace("'", "''") + "%' and produto like '%" + busca.Replace("'", "''") + "%' and autorizarmercadopago=true order by produto";comando
= "Select * from produtos where autorizarmercadopago = true "+ concatenacatalogo +" order by produto";}
else{
comando
= "Select * from produtos where palavrachave like '%" + palavrachave.Replace("'", "''") + "%' and produto like '%" + busca.Replace("'", "''") + "%' and catalogo like '%" + busca.Replace("'", "''") + "%'"+ concatenacatalogo +" order by produto";}
//Response.Write comando; // Response.End;objCommand
.Fill(ds, "produtos");terça-feira, 17 de julho de 2007 19:55