Busca com like no banco de dados
Prezado(a) leitor(a), hoje eu vou falar e mostrar como fazer um like no banco de dados. Essa é a forma que uso no dia a dia e ao mesmo tempo seguro para evitar “scripts” maldosos. Eu usei “SQLCommand” e “IDataParameter” com o comando “Select” e “like”
Já estou a vários dias preparando esse artigo e procurando passar o melhor para você leitor(a) e programador(a).
Referência:
Ferramenta: Visual Studio
Linguagem: C#
Camada de dados
Banco de dados SQL Server, MySQL, Oracle e mais
A camada de acesso a dados deve ser sempre protegida, eu mesmo crio classes do tipo internas quando se trata de acesso a dados, por exemplo: “internal class…”. Quando você vai criar um sistema com camadas, é interessante definir as camadas de forma correta e ao mesmo tempo respeitar o que foi definido. O MVC (http://en.wikipedia.org/wiki/MVC_Pattern) é uma forma muito boa de separar as camadas e aproveitando códigos já escritos.
O mesmo código escrito para um site pode ser aproveitado para ser escrito para um aplicativo móvel, lógico que falando da camada de dados e regra de negócio. As camadas de “design” são diferentes e precisam ser re-escritas.
O primeiro passo para a criação do código é saber o que precisa realmente buscar do banco de dados. No meu caso, quero buscar o nome e e-mail e pra isso é necessário executar o primeiro comando, chamado “select”.
Referência 1.1 - SELECT
StringBuilder str = new StringBuilder();
str.Append(@"SELECT
Nome, Email
FROM
Aluno");
str.Append(@" AND Nome like @nome ");
str.Append(@" Order by Nome ");
A referência 1.1 mostra que estou utilizando o comando “StringBuilder” para armazenar as “strings” que serão enviadas para a execução no banco de dados. Depois do comando criado, temos que executar a instrução e pra isso, existem outros comandos. Lembro que, a melhor forma de passar parâmetro para o banco de dados é utilizando parâmetro sem aspas. Por isso coloquei o @nome depois do “like”.
Referência 1.2 - Passando o valor
SqlCommand dbCommand = new SqlCommand(str.ToString());
dbCommand.CommandType = CommandType.Text;
IDataParameter nome = new SqlParameter();
nome.ParameterName = "@nome";
nome.Value = "%" + dto.nome + "%";
nome.DbType = System.Data.DbType.String;
dbCommand.Parameters.Add(nome);
database.GetSourceConnection();
return database.ExecutaDataSetParameter(dbCommand).Tables[0];
A referência 1.2 mostra como passar o parâmetro para o banco de dados utilizando arroba no e passando o valor pelo “IDataParameter”. Note que para o like, é necessário colocar o “%” porcento antes e depois do valor. O porcento antes busca as últimas palavras do campo (no meu caso Nome) e o “%” porcento depois busca os primeiros valores do campo Nome.
Na continuação do método, existem os métodos GetSourceConnection() e o executaDataSetParameter, específicos do meu “framework”, fiz um para acesso a dados, ou seja, para acesso ao banco de dados SQL Server ou qualquer outro que houver.
O próximo exemplo que vou dar é passar o “%” porcento dentro da instrução SQL e antes de informar o valor do parâmetro, isto é, diferente do primeiro exemplo referência 1.2. Primeiro de tudo você cria a “StringBuilder” e depois constrói a instrução.
Referência 1.3 - Novo exemplo
StringBuilder str = new StringBuilder();
str.Append(@"SELECT
Nome, Email
FROM
Aluno");
str.Append(@" AND Nome like %@nome% ");
str.Append(@" Order by Nome ");
SqlCommand dbCommand = new SqlCommand(str.ToString());
dbCommand.CommandType = CommandType.Text;
IDataParameter nome = new SqlParameter();
nome.ParameterName = "@nome";
nome.Value = dto.nomeMembro;
nome.DbType = System.Data.DbType.String;
dbCommand.Parameters.Add(nome);
database.GetSourceConnection();
return database.ExecutaDataSetParameter(dbCommand).Tables[0];
A única mudança realizada no exemplo 1.3 está na segunda linha de código cujo o porcento está na instrução de comando para envio ao banco de dados. A grande vantagem de usar qualquer um dos dois exemplos é não usar aspas simples ou aspas na instrução de comando SELECT. Você sabia que o uso das aspas pode facilitar a invasão através do seu sistema usando apenas jogo de aspas simples com duplas? As formas mostradas anteriormente resolve esse problema de forma simples e tranquila.
Espero que tenham gostado do artigo e qualquer dúvida favor entrar em contato através do site www.mauriciojunior.org.
Até a próxima.
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.