Quem já programou acesso a banco de dados na mão em .NET, sabe que mexer naquelas classes do ADO.NET é mais feio que processo na Justiça. É uma salada mista de Commands, Connections, DataReaders, DataAdapters, e outros bichos. O ADO.NET é uma biblioteca de baixo nível, bem estruturada, e por causa disso, um pé-no-saco de se programar.
Pois bem, minha última pendenga com ADO.NET foi com parâmetros de comando. Para quem não é versado no assunto, basicamente o ADO.NET é estruturado de forma que você possa enviar comandos SQL para um banco de dados (como SELECT, INSERT, CREATE TABLE, etc) ou fazer chamadas a stored procedures e functions.
Rege as leis dos bons costumes (e o medo do SQL Injection) que, sempre que for necessário enviar dados para um comando SQL (como o filtro de um SELECT), você precisa usar parâmetros de comando. Ou seja, ao invés de você fazer isso:
public List<Pessoa> ListarPessoas(string nome)
{
string query = "SELECT * FROM PESSOAS A WHERE A.NOME LIKE '%" + nome + "%'";
OracleCommand comando = new OracleCommand(query);
// Continua..
É bem melhor para sua sanidade e emprego fazer isso:
public List<Pessoa> ListarPessoas(string nome)
{
string query = "SELECT * FROM PESSOAS A WHERE A.NOME LIKE :nome";
OracleCommand comando = new OracleCommand(query);
OracleParameter param = new OracleParameter("nome", nome);
param.OracleType = OracleType.VarChar;
comando.Parameters.Add(param);
Só que com essa pequena adição de segurança, você ganha também uma porção de linhas de código a mais no seu programa. Que você terá que escrever. Imagine um comando relativamente realístico cheio de parâmetros como este:
string query = "SELECT * FROM PESSOAS A WHERE " +
"A.NOME LIKE :nome AND " +
"A.IDADE > :idade AND " +
"DATA_CADASTRO >= :data_inicial " +
"DATA_CADASTRO <= :data_final ";
Consegue ter uma idéia de quantas linhas de código são necessárias para adicionar todos esses parâmetros? Quanto tempo vai ficar perdendo tempo com burocracia de código? Quão mais próximo de um colapso do túnel de carpo? Eu digo a você: a resposta é muito.
Nessas horas eu me pego filosofando: deve haver um modo mais fácil de fazer isso. Um modo de economizar trabalho burocrático. Um modo de escrever apenas o essencial, de se livrar da gordura. Diabo, um modo de consertar essas classes que não pensam na saúde dos seus clientes.
E por incrível que pareça, existe um modo. A solução se chama Extension Methods, e está no .NET Framework a partir da versão 3.0.
Continuar Lendo »