locked
Duvidas em ACCESS para .NET2.0 - Busca em Palavras Chaves RRS feed

  • 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);

     

    //Decisao da busca via catalogo

    // embutindo a decisão via concatenação na instru select

    concatenacatalogo = " ";

    if (lista == String.Empty) concatenacatalogo = " ";

    if (lista == "nv") { concatenacatalogo = concatenacatalogo + " and autorizarnovidades = true "; }

     

    if (lista == "dt") { concatenacatalogo = concatenacatalogo + " and autorizardestaques = true "; }

     

     

    if (lista == "pr") { concatenacatalogo = concatenacatalogo + " and autorizarpromocao = true "; }

     

     

    //monta select

    if (codigoml != string.Empty)

    {

    //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;

     

    String qry = comando;

    //String qry = "Select * from produtos where palavrachave like '*" + palavrachave + "*' and produto like '*" + busca + "*' order by produto";

    // conecta

    OleDbConnection objConn = new OleDbConnection(provider + banco);

    OleDbDataAdapter objCommand = new OleDbDataAdapter(qry, objConn);

    DataSet ds = new DataSet();

    objCommand.Fill(ds, "produtos");

    terça-feira, 17 de julho de 2007 19:55