.NET

3 abr, 2008

Extraindo dados para arquivo texto

Publicidade

Extrair informações de um banco de dados é a missão da maior parte dos softwares existentes no mercado e alguns programadores utilizam componentes de terceiros ou geradores de relatórios como o Crystal Reports. Neste artigo, a intenção é mostrar como extrair os dados de uma tabela e gravar em um arquivo texto.

Claro que utilizar componentes de terceiros otimiza muito o desenvolvimento, porém em algumas circunstâncias o mesmo torna-se inviável, considerando o budget do projeto ou por ser alguma aplicação simplificada de extração de dados.

Um bom exemplo para este tipo de projeto, seria um software de apontamento de produção de chão de fábrica que gera um arquivo texto, para que um software gerencial ou ERP possa fazer a importação dos dados.

Para desenvolver o raciocínio do nosso artigo vou apresentar um passo a passo de como gerar um aplicativo que extrai dados de uma tabela de contatos e inclui em um arquivo texto, isso poderá ser utilizado como relatório ou como fonte de dados para outros aplicativos.

Criando o banco e a tabela

Não irei deter-me a explicações básicas de conexão a banco e criação de tabelas. Para quaisquer dúvidas vejam meus artigos anteriores ou entrem em contato.

Neste artigo, vou utilizar o SQL Server 2000 como banco de dados para nossa aplicação de exemplo. Veja abaixo a tabela de contatos e o script para criá-la.

Criando o Aplicativo

Para criar o nosso aplicativo no Visual Studio 2005 selecione o Windows Application e crie um formulário, conforme a imagem abaixo.

Este formulário contém um frame, um botão e um SaveFileDialog.

Altere a propriedade name do botão para btnGerarArquivo e o SaveFileDialog para dlgArquivo.

Codificando a classe

Agora que temos o nosso layout pronto, vamos codificar o aplicativo. Para preencher o nosso arquivo utilizaremos um DataReader, vamos criar um classe nomeada clsContato, onde iremos fazer a conexão a banco e extrair um DataReader.

Para criar a classe clique com o botão direito sobre o projeto na janela Solution Explorer e selecione Add – New Item e na janela que irá abrir selecione Class, insira o nome clsContato e clique em salvar.

Abaixo segue o código da nossa classe.

Vamos às considerações sobre o código acima, não vou explicar os conceitos básicos apenas o suficiente para o bom entendimento e execução do nosso exemplo.

No início do código nós criamos uma string com os dados de conexão ao banco, para ter resultado no seu projeto altere esta linha conforme a sua realidade, na linha 10 eu criei um SqlConnection, ou seja, um objeto de conexão ao SQL Server.

A função funContatos retornará uma SQLDataReader com todos os registros cadastrados na tabela contato, veja o select ele não tem cláusula de filtro, apenas seleciona todos os itens da tabela.

Codificando o formulário

Para facilitar o entendimento do código, vou quebrá-lo em diversas partes, sendo functions e procedures, mas tudo poderia estar no procedimento do evento clique do botão gerar.

O nosso primeiro código será uma função que retornará uma caixa de diálogo para salvar o arquivo, esta função retornará o local e o nome do arquivo a ser gerado.

O próximo código é uma função que retornará o cabeçalho do nosso arquivo, para diminuir o código vou incluir apenas o nome e o telefone do contato, mas na hora de exercitar você pode incluir os demais campos.

Para quem não vem de muito tempo utilizando o Visual Basic, as expressões vbTab e vbCrLf são expressões antigas que indicam o caractere de tab e nova linha e retorno do carro, respectivamente.

Agora a função que concatena os itens da listagem, recomendo que em um aplicativo real, ou seja, não de teste utilizem a função StringBuilder, ela permitirá uma otimização na concatenação de uma string.

Outra recomendação é a criação de funções que gerem a contagem de caracteres certos para fazer o alinhamento das colunas e assim deixar o arquivo texto com uma apresentação melhorada.

Os dados que eu estou apresentando são apenas ilustrativos, na hora de criar um aplicativo use da forma mais criativa possível. Abaixo segue o rodapé e a última parte das strings que irão compor o nosso arquivo.

Agora que já temos as funções e procedimentos necessários para o nosso projeto, vamos codificar o botão gerar. O código abaixo é a primeira parte do evento clique do botão btnGerar.

Nas declarações das variáveis lStrArquivo chamaremos a função que receberá através de uma DialogBox o local e o nome do arquivo a ser criado, nas demais declarações seguem a mesma lógica, ou seja, vamos chamar cada uma das funções criadas anteriormente para que elas preencham as nossas variáveis.

A variável lStrTexto receberá o conteúdo de todas as demais variáveis e entre elas um caractere de nova linha.

Abaixo instanciaremos a FileStream que esta em System.IO, passando a variável lStrArquivo que contém o caminho e o nome do arquivo e o selecionaremos o FileMode para OpenOrCreate, ou seja, para abrir ou criar um arquivo.

Logo após, vamos criar um StremWriter que terá o objStream criado anteriormente, após isso, é só se valer do método Write do StreamWriter e fechar o arquivo através do método Close.

Teste

Para executar um teste teremos que ter algumas informações na nossa tabela de contato, para isso vamos utilizar o Query Analyzer e executar um script de inserção de dados. Vide a figura abaixo.

Após ter feito o insert na tabela, vamos rodar o programa, pressione F5.

Quando executar o programa, clique em gerar ele abrirá a DialogBox – Salvar Como, escolha um diretório e um nome, com isso feito basta apenas clicar em salvar.

Conclusão

Muitos foram os projetos que eu trabalhei que incluíam transferência de dados entre o aplicativo em desenvolvimento e o aplicativo gerencial ou ERP do cliente, e a “grande jogada” aqui não era criar somente um arquivo de texto, mas ter uma idéia de como podemos criar arquivos de texto para extração de dados.

Mais uma vez reforço a afirmação que o .NET Framework simplifica muito a vida do desenvolvedor, afinal vimos que com apenas quatro linhas podemos criar um arquivo de texto em disco. Para quem é programador de longa data, gosto de lembrar como era trabalhoso algumas operações em versões antigas do Visual Basic.

Agora solte a imaginação e aproveite o enorme leque de possibilidades e recursos do .NET Framework.