Create Overload Your Methods , and optimize the code for unnecessary code repetition. I made an example, but it is as simple as possible for understanding, since I would have made these methods even more optimized.
public class Filtro
{
private String SQLDefault
{
get
{
return @"select pro_codigo, set_codigo, pro_nome,
pro_valor, pro_localizacao, pro_descricao,
pro_cestabasica, pro_imagem, pro_codigobarras
from produtos where 1=1";
}
}
public IList<Produtos> SelectFilter(Int32 CodigoProduto)
{
ConexaoBancoDados conexaoDB = new ConexaoBancoDados();
MySqlConnection con = null;
MySqlCommand cmd = null;
String SQLComplete = SQLDefault;
IList<Produtos> Produtos = null;
try
{
con = new MySqlConnection(conexaoDB.getStringConexao());
con.Open();
SQLComplete += " AND pro_codigo = @pro_codigo";
cmd = new MySqlCommand(SQLComplete, con);
cmd.Parameters.Add("@pro_codigo", MySqlDbType.Int32).Value = CodigoProduto;
using (MySqlDataReader dr = cmd.ExecuteReader())
{
if (dr.HasRows)
{
Produtos = new List<Produtos>();
while (dr.Read())
{
Produtos prod = new Produtos();
prod.pro_codigo = dr.GetInt32(0);
prod.set_codigo = dr.GetInt32(1);
prod.pro_nome = dr.GetString(2);
prod.pro_valor = dr.GetDouble(3);
prod.pro_localizacao = dr.GetString(4);
prod.pro_descricao = dr.GetString(5);
prod.pro_cestabasica = dr.GetString(6);
prod.pro_imagem = dr.GetString(7);
prod.pro_codigobarras = dr.GetString(8);
Produtos.Add(prod);
}
}
}
cmd.Dispose();
con.Close();
con.Dispose();
}
catch {
if (cmd != null ){
cmd.Dispose();
}
if (con != null){
if (con.State == System.Data.ConnectionState.Open){
con.Close();
}
con.Dispose();
}
}
return Produtos;
}
public IList<Produtos> SelectFilter(String NomeProduto)
{
ConexaoBancoDados conexaoDB = new ConexaoBancoDados();
MySqlConnection con = null;
MySqlCommand cmd = null;
String SQLComplete = SQLDefault;
IList<Produtos> Produtos = null;
try
{
con = new MySqlConnection(conexaoDB.getStringConexao());
con.Open();
SQLComplete += " AND pro_nome like @pro_nome";
cmd = new MySqlCommand(SQLComplete, con);
cmd.Parameters.Add("@pro_nome", MySqlDbType.String).Value = string.Format("%{0}%", NomeProduto);
using (MySqlDataReader dr = cmd.ExecuteReader())
{
if (dr.HasRows)
{
Produtos = new List<Produtos>();
while (dr.Read())
{
Produtos prod = new Produtos();
prod.pro_codigo = dr.GetInt32(0);
prod.set_codigo = dr.GetInt32(1);
prod.pro_nome = dr.GetString(2);
prod.pro_valor = dr.GetDouble(3);
prod.pro_localizacao = dr.GetString(4);
prod.pro_descricao = dr.GetString(5);
prod.pro_cestabasica = dr.GetString(6);
prod.pro_imagem = dr.GetString(7);
prod.pro_codigobarras = dr.GetString(8);
Produtos.Add(prod);
}
}
}
cmd.Dispose();
con.Close();
con.Dispose();
}
catch
{
if (cmd != null)
{
cmd.Dispose();
}
if (con != null)
{
if (con.State == System.Data.ConnectionState.Open)
{
con.Close();
}
con.Dispose();
}
}
return Produtos;
}
public IList<Produtos> SelectFilter(Double ValorProduto)
{
ConexaoBancoDados conexaoDB = new ConexaoBancoDados();
MySqlConnection con = null;
MySqlCommand cmd = null;
String SQLComplete = SQLDefault;
IList<Produtos> Produtos = null;
try
{
con = new MySqlConnection(conexaoDB.getStringConexao());
con.Open();
SQLComplete += " AND pro_valor = @pro_valor";
cmd = new MySqlCommand(SQLComplete, con);
cmd.Parameters.Add("@pro_valor", MySqlDbType.Double).Value = ValorProduto;
using (MySqlDataReader dr = cmd.ExecuteReader())
{
if (dr.HasRows)
{
Produtos = new List<Produtos>();
while (dr.Read())
{
Produtos prod = new Produtos();
prod.pro_codigo = dr.GetInt32(0);
prod.set_codigo = dr.GetInt32(1);
prod.pro_nome = dr.GetString(2);
prod.pro_valor = dr.GetDouble(3);
prod.pro_localizacao = dr.GetString(4);
prod.pro_descricao = dr.GetString(5);
prod.pro_cestabasica = dr.GetString(6);
prod.pro_imagem = dr.GetString(7);
prod.pro_codigobarras = dr.GetString(8);
Produtos.Add(prod);
}
}
}
cmd.Dispose();
con.Close();
con.Dispose();
}
catch
{
if (cmd != null)
{
cmd.Dispose();
}
if (con != null)
{
if (con.State == System.Data.ConnectionState.Open)
{
con.Close();
}
con.Dispose();
}
}
return Produtos;
}
public IList<Produtos> SelectFilter(object value)
{
Type _type = value.GetType();
IList<Produtos> Produtos = null;
switch (_type.FullName.ToLower())
{
case "system.string":
{
Produtos = this.selectFilter(((string)value));
break;
}
case "system.int":
case "system.int32":
{
Produtos = this.selectFilter(((Int32)value));
break;
}
case "system.double":
{
Produtos = this.selectFilter(((double)value));
break;
}
}
return Produtos;
}
}
The
SelectFilter
method has 4 overloads, one type
Int32
, the other type
String
, the other type
Double
and the last type
Object
, this is magic where the compiler will decide which method to perform according to the informed pars.
The SelectFilter
of Object
has a pecularity, where it will decide which type is the value informed and redirect to the correct method according to the type.
References: