![]() |
Este artigo mostra como podemos gerar um arquivo CSV a partir de um banco de dados SQL Server. Mostra também como podemos acessar o arquivo CSV e exibir o seu conteúdo em um controle DataGridView. |
Comma-separated
values (ou CSV) é um formato de arquivo que armazena dados tabelados, cujo
grande uso data da época dos mainframes. Por serem bastante simples,
arquivos .csv são comuns em todas as plataformas de computador. O CSV é um implementação particular de arquivo texto separados por um delimitador, que usa a vírgula e a quebra de linha para separar os valores. O formato também usa as aspas em campos no qual são usados os caracteres reservados (vírgula e quebra de linha). Essa robustez no formato torna o CSV mais amplo que outros formatos digitais do mesmo segmento.(http://pt.wikipedia.org/wiki/Comma-separated_values) Exemplo de um arquivo CSV:
Arquivo Agenda de
contatos |
Iremos usar a função Split() que é muito versátil e pode ser usada em muitos cenários quando precisamos separar strings.
A função Split() retorna um array de única dimensão contendo o número de substrings separadas no processo dependendo do critério e delimitador usado.
As operações de input e output na plataforma .NET são gerenciadas pela classe abstrata Stream que esta no namespace System.IO, mas não podemos usar a classe Stream diretamente para acessar arquivos, para fazer isso usamos as classe StreamReader para ler e StreamWriter para escrever em arquivos textos.
Objetivo
Vamos acessar um banco de dados SQL Server chamado Agenda.mdf e gerar um arquivo CSV a partir da tabela Clientes que tem a seguinte estrutura;
![]() |
Para fazer a conexão com o banco de dados vamos obter a string de conexão do arquivo App.config usando a classe ConfigurationManger. Para fazer isso devemos incluir uma referência no projeto ao namespace System.Configuration. Abaixo vemos a string e conexão no arquivo App.Config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="ConexaoSQLClientes"
connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=Agenda;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
|
O arquivo CSV será gerado na pasta c:\dados\ com o nome Clientes.csv de onde iremos ler o seu conteúdo exibindo os dados no controle DataGridView.
Recursos usados:
Criando o projeto
Abra o Visual Studio 2012 Express for Windows Desktop e clique em New Project;
Selecione a linguagem Visual C# e o template Windows Forms Application e informe o nome SQL_CSV;
Para isso vamos incluir no formulário form1.cs os seguintes controles:
Disponha os controles conforme o leiaute da figura abaixo:
![]() |
![]() |
No formulário form1.cs
vamos também declarar os namespaces usados no projeto:
using
using
System.Data;using
System.Windows.Forms;using
System.Configuration;using
System.Data.SqlClient;using
System.IO;Após a declaração da classe Form1 vamos definir uma variável que será visível no formulário todo para armazenar o caminho e nome do arquivo CSV:
string
arquivoCSV = "";Na TabPage1 , no evento Click do botão de comando - Obter String de Conexão - inclua o código abaixo:
private void btnStringConexao_Click(object sender, EventArgs e){ try { txtStringConexao.Text = ConfigurationManager.ConnectionStrings["ConexaoSQLClientes"].ConnectionString;} catch (Exception ex) { MessageBox.Show("Erro " + ex.Message); } } |
Agora no evento Click do botão de comando Gerar Arquivo CSV - defina o seguinte código:
private void btnGerarCSV_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtArquivoCSV.Text))
{
MessageBox.Show("Informe o caminho e nome do arquivo CSV !", "Arquivo CSV", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
arquivoCSV = txtArquivoCSV.Text;
}
try
{
SqlConnection cn = new SqlConnection(txtStringConexao.Text);
SqlDataAdapter adp = new SqlDataAdapter("select * from Clientes", cn);
DataTable dt = new DataTable();
adp.Fill(dt);
//cria um streamwriter para escrever no arquivo CSV
StreamWriter sw = new StreamWriter(txtArquivoCSV.Text, false);
int iColCount = dt.Columns.Count;
//conta as colunas para montar o cabecalho
for (int i = 0; i < iColCount; i++)
{
sw.Write(dt.Columns[i]);
if (i < iColCount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
//percorre cada linha do datatable e monta o arquivo CSV
foreach (DataRow dr in dt.Rows)
{
for (int i = 0; i < iColCount; i++)
{
if (!Convert.IsDBNull(dr[i]))
{
sw.Write(dr[i].ToString());
}
if (i < iColCount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
}
sw.Close();
MessageBox.Show("Arquivo CSV gerado com sucesso !", "Arquivo CSV", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
|
Agora, na TabPage2, no evento Click do botão de comando Obter dados do arquivo CSV inclua o código abaixo:
private void btnObterCSV_Click(object sender, EventArgs e)
{
try
{
arquivoCSV = txtArquivoCSV.Text;
string strLinha;
string[] strArray;
char[] charArray = new char[] { ',' };
DataSet ds = new DataSet();
DataTable dt = ds.Tables.Add("Clientes");
string path = arquivoCSV;
//cria um stream no modo Open
FileStream aFile = new FileStream(path, FileMode.Open);
// le o arquivo CSV
StreamReader sr = new StreamReader(aFile);
// le um al inha do arquivo
strLinha = sr.ReadLine();
// cria um array separando os campos
strArray = strLinha.Split(charArray);
//percorre cada linha do array e extrai as colunas
for (int x = 0; x <= strArray.GetUpperBound(0); x++)
{
dt.Columns.Add(strArray[x].Trim());
}
strLinha = sr.ReadLine();
while (strLinha != null)
{
strArray = strLinha.Split(charArray);
DataRow dr = dt.NewRow();
for (int i = 0; i <= strArray.GetUpperBound(0); i++)
{
dr[i] = strArray[i].Trim();
}
dt.Rows.Add(dr);
strLinha = sr.ReadLine();
}
sr.Close();
dgvDados.DataSource = dt;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"Erro", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
|
Executando o projeto após gerar o arquivo Clientes.csv iremos obter o seguinte resultado:
![]() |
Abrindo o arquivo Clientes.csv na pasta c:\dados usando o editor de textos NotePad++ podemos visualizar o seu conteúdo:
![]() |
Após, isso acionando a TabPage2, e clicando no botão Obter dados do arquivo CSV teremos o seguinte resultado:
![]() |
Com este artigo eu quis mostrar como gerar e acessar um arquivo CSV usando a linguagem C#. Se o arquivo delimitado por vírgula contiver dados com apóstrofe e/ou vírgulas você terá um problema e terá que realizar o parse da string para verificar se a vírgula faz parte do campo ou não.
Como exercício proponho que você crie o código para atualizar o arquivo CSV a partir do DataGridView e a seguir atualizar a tabela do banco de dados SQL Server com os dados do arquivo CSV. (Eu ja deixei um código comentado que precisa ser ajustado)
Pegue o projeto
completo aqui :
SQL_CSV.zip
Filipenses 2:3 nada façais por contenda ou por vanglória, mas com humildade cada um considere os outros superiores a si mesmo;
Filipenses 2:4 não olhe cada um somente para o que é seu, mas cada qual também para o que é dos outros.
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#