Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia!
Pessoal, sou novo no fórum e me cadastrei aqui porque não consegui encontrar ajuda no google ou em qualquer outro lugar sobre como criar relatórios usando uma arquitetura de 3 camadas. A maioria dos exemplos que vi, pede para usar um Dataset criando uma nova conexão de acesso ao banco, mas isso eu não quero. Eu quero usar a camada de acesso ao banco que já possuo, onde tem a string de conexão com o banco e os métodos que uso para consultas, inserts, deletes e updates.
Não tenho muita experiência em desenvolvimento de aplicações OO, fiz alguns cursos de Java, C#, mas fuçando no Visual Studio consegui progredir bastante no desenvolvimento em C# Windows Form do sistema que estou criando para minha confecção, mas esbarrei nessa dificuldade com a criação de relatórios usando essa arquitetura.
Decidi criar o sistema baseando-me nos conceitos que adiquiri na outra empresa onde trabalhei, separando o desenvolvimento em camadas (dados, negócio e apresentação), pois não queria ficar preso a uma só tecnologia e facilitar também a manutenção do sistema, deixando tudo separado e reutilizando códigos.
Na classe que chamo de "banco.cs" tenho a string de conexão com o MySQL e os métodos que criei para consultar e manipular o banco.
Nas classes de negócio, tenho as propiredades de acordo com cada classe e o objeto da classe banco que crio para poder chamar os métodos de consulta e manipulação do banco onde defino as querys de consulta de uma determinda tabela, inserts, updates, deletes, carga de combobox, datagridview entre outros.
E tenho os Windows Forms que criei para cadastro de pessoas(fisicas ou juridicas), matérias-primas, receitas, despesas, controle de estoque entre outros formulários que criei e outros que ainda estão em desenvolvimento.
Minha dúvida é como utilizar essa estrutura para criar relatórios usando os produtos que tenho disponível (crystal reports ou stimulsoft reports ou mesmo o Report do Visual Studio) sem ter que recriar as conexões ao banco a todo relatório que for criar.
Criei um método na classe banco que carrega e retorna um Dataset como aparece abaixo:
public Banco() {
conexao = @"server=xxxxxxxxx;User Id=xxxx;password=xxxxxx;Persist Security Info=True;database=xxxxxx";
conn = new MySqlConnection(conexao);
cmd = null;
}
public DataSet RetornaDataSet(string Sql) {
conn.Open();
cmd = new MySqlCommand(Sql, conn);
cmd.CommandType = CommandType.Text;
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
DataSet dset = new DataSet();
da.Fill(dset);
conn.Close();
return dset;
}
Na classe de negócio, chamo o método dessa forma:
class Cor : Banco {
public int IdCor { get; set; }
public string DescCor { get; set; }
Banco objBanco = new Banco();
public DataSet ObtemCor() {
return objBanco.RetornaDataSet("select * from cor");
}
}
Esse é apenas um exemplo, onde tentei gerar, como um teste, uma relação de cores de um determinado material (cores de tecidos ou aviamentos).
No Form do relatório que estou criando, tenho o objeto da classe Cor, mas não sei como chamar o método ObtemCor() dessa classe e atribuir o retorno em um Dataset e usá-lo em um Report. Será que essa é a forma correta ou o melhor caminho? Alguém poderia me ajudar nessa questão?
Fico muito grato!
Carregando comentários...