Ir para o conteúdo do rodapé
USANDO O IRONXL
Como ler dados de um arquivo CSV e armazená-los em um banco de dados usando C#

Como ler dados de um arquivo CSV e armazená-los em um banco de dados em C#

No mundo digital de hoje, lidar com dados de maneira eficiente é uma tarefa importante. Um requisito comum no desenvolvimento de software é ler dados de um arquivo CSV e armazená-los em um banco de dados. Este tutorial cobre os passos para ler dados de um arquivo CSV e armazená-los em um banco de dados SQL Server usando C#, especificamente utilizando a biblioteca IronXL. Este guia é projetado para iniciantes e será explicado de forma simples e envolvente.

Entendendo o básico

O que é um Arquivo CSV?

Um arquivo CSV (Valores Separados por Vírgulas) é um arquivo de texto simples que contém dados separados por vírgulas. É um formato popular para transferência de dados devido à sua simplicidade e compatibilidade com várias aplicações, como o Excel.

O Papel do SQL Server e dos Bancos de Dados

O SQL Server é um sistema de gestão de banco de dados da Microsoft. Ele é usado para armazenar e gerenciar dados de maneira estruturada. No nosso caso, vamos armazenar os dados do CSV em uma tabela do SQL Server.

Introdução ao IronXL

O IronXL é uma biblioteca Excel adaptada para aplicações .NET, especificamente projetada para permitir que os desenvolvedores leiam, gerem e editem arquivos Excel sem precisar do Microsoft Office Interop. Esta biblioteca se destaca por sua compatibilidade com várias versões e plataformas .NET, incluindo .NET Core, .NET Standard e .NET Framework, bem como por seu suporte a diferentes sistemas operacionais, como Windows, Linux e macOS. É uma biblioteca poderosa para importar dados, especialmente para lidar com arquivos CSV.

How to Read and Store Data From CSV Files in C#

  1. Crie um programa de console C# no Visual Studio.
  2. Instale a biblioteca CSV usando o Gerenciador de Pacotes NuGet.
  3. Carregue o arquivo CSV no programa utilizando a biblioteca.
  4. Crie uma conexão com o banco de dados.
  5. Leia o conteúdo do arquivo CSV usando a biblioteca.
  6. Copie esse conteúdo no banco de dados usando o método SqlBulkCopy.

Aqui está um exemplo de trecho de código:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;
using CsvHelper;

namespace CsvReader
{
    class Program
    {
        static void Main(string[] args)
        {
            string csvPath = @"path\to\your\csv\file.csv";

            using (var reader = new StreamReader(csvPath))
            using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
            {
                // Mapping the CSV data to the corresponding model
                var records = csv.GetRecords<YourModel>();

                using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
                {
                    sqlBulkCopy.DestinationTableName = "YourTableName";
                    sqlBulkCopy.WriteToServer(records.AsDataReader());
                }

                Console.WriteLine("Data imported successfully!");
            }
        }
    }

    // Define your model that maps to the CSV columns
    public class YourModel
    {
        // Define properties here representing the CSV columns
    }
}
using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;
using CsvHelper;

namespace CsvReader
{
    class Program
    {
        static void Main(string[] args)
        {
            string csvPath = @"path\to\your\csv\file.csv";

            using (var reader = new StreamReader(csvPath))
            using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
            {
                // Mapping the CSV data to the corresponding model
                var records = csv.GetRecords<YourModel>();

                using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
                {
                    sqlBulkCopy.DestinationTableName = "YourTableName";
                    sqlBulkCopy.WriteToServer(records.AsDataReader());
                }

                Console.WriteLine("Data imported successfully!");
            }
        }
    }

    // Define your model that maps to the CSV columns
    public class YourModel
    {
        // Define properties here representing the CSV columns
    }
}
$vbLabelText   $csharpLabel

Certifique-se de substituir "path\to\your\csv\file.csv" pelo caminho real para o seu arquivo CSV, YourModel pelo modelo que representa seus dados CSV, "your_connection_string" pela string de conexão do banco de dados, e "YourTableName" pelo nome da sua tabela do banco de dados.

Preparando o ambiente

Pré-requisitos

  1. Visual Studio: Certifique-se de ter o Visual Studio instalado.
  2. SQL Server: Você deve ter o SQL Server instalado e acessível.
  3. Instalação do IronXL: Instale o IronXL executando o seguinte comando do NuGet:
dotnet add package IronXL

Certifique-se de executar esses comandos no diretório do projeto onde você deseja instalar o IronXL.

Criando uma Tabela no SQL Server

Antes de importar dados, crie uma tabela de destino no seu banco de dados SQL Server. Esta tabela armazenará os dados do CSV.

CREATE TABLE YourTableName (
    Column1 DataType,
    Column2 DataType,
    ...
);

Substitua YourTableName, Column1, Column2, e DataType pelos seus detalhes específicos.

Guia Passo a Passo para Importar Dados CSV

  1. Primeiro, certifique-se de ter um arquivo CSV contendo os dados que deseja importar.
  2. Crie um novo projeto de aplicação de console C# no Visual Studio.
  3. Instale o pacote CsvHelper do NuGet para leitura de arquivos CSV. Você pode fazer isso abrindo o Console do Gerenciador de Pacotes NuGet no Visual Studio e executando o seguinte comando:

    Install-Package CsvHelper
    Install-Package CsvHelper
    SHELL
  4. Adicione as instruções usando necessárias no topo do seu arquivo de código C#:

    using System;
    using System.IO;
    using System.Globalization;
    using CsvHelper;
    using System.Data.SqlClient;
    using System;
    using System.IO;
    using System.Globalization;
    using CsvHelper;
    using System.Data.SqlClient;
    $vbLabelText   $csharpLabel
  5. No seu código, especifique o caminho para o seu arquivo CSV. Por exemplo:

    string csvFilePath = @"C:\path\to\your\csv\file.csv";
    string csvFilePath = @"C:\path\to\your\csv\file.csv";
    $vbLabelText   $csharpLabel

    Certifique-se de substituir C:\path\to\your\csv\file.csv pelo caminho real para o seu arquivo CSV.

  6. Crie uma nova instância da classe StreamReader para ler o arquivo CSV:

    using (var reader = new StreamReader(csvFilePath))
    {
        // code goes here
    }
    using (var reader = new StreamReader(csvFilePath))
    {
        // code goes here
    }
    $vbLabelText   $csharpLabel
  7. Crie uma nova instância da classe CsvReader, passando o objeto StreamReader:

    using (var reader = new StreamReader(csvFilePath))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        // code goes here
    }
    using (var reader = new StreamReader(csvFilePath))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        // code goes here
    }
    $vbLabelText   $csharpLabel
  8. Opcionalmente, configure o objeto CsvReader com as configurações necessárias. Por exemplo:

    csv.Configuration.HasHeaderRecord = true;
    csv.Configuration.HasHeaderRecord = true;
    $vbLabelText   $csharpLabel
  9. Use o método GetRecords<t>() do objeto CsvReader para ler os dados do CSV em uma coleção de objetos. Substitua <t> pelo tipo de objeto que representa cada registro no arquivo CSV. Por exemplo:

    var records = csv.GetRecords<YourModel>();
    var records = csv.GetRecords<YourModel>();
    $vbLabelText   $csharpLabel

    Certifique-se de substituir YourModel pelo nome real da sua classe modelo.

  10. Itere sobre os registros e realize qualquer processamento ou validação necessária:

    foreach (var record in records)
    {
        // Process each record as needed
    }
    foreach (var record in records)
    {
        // Process each record as needed
    }
    $vbLabelText   $csharpLabel
  11. Opcionalmente, estabeleça uma conexão com o seu banco de dados SQL Server usando ADO.NET ou uma ferramenta ORM como o Entity Framework.
  12. Insira cada registro no banco de dados usando o mecanismo de acesso ao banco de dados escolhido. Por exemplo, se você estiver usando ADO.NET, pode utilizar a classe SqlBulkCopy para inserir os dados em massa de forma eficiente.
  13. Lide com quaisquer exceções que possam ocorrer durante o processo de importação e forneça mensagens de erro apropriadas ou registros de log.
  14. Teste seu aplicativo executando-o e verificando se os dados CSV são importados com sucesso em seu banco de dados.

É isso! Agora você importou com sucesso dados CSV para seu banco de dados SQL Server usando C#.

Passo 1: Lendo o Arquivo CSV

Ao iniciar a tarefa de importar dados de um arquivo CSV, o primeiro passo crucial é ler os dados com precisão. Cada linha em um arquivo CSV normalmente representa um registro de dados, e cada registro consiste em um ou mais campos, separados por vírgulas.

Empregamos então a biblioteca IronXL para lidar com o arquivo CSV. Para ler o arquivo CSV usando IronXL, você usará suas classes WorkBook e WorkSheet. A classe WorkBook representa uma planilha inteira, que pode ser um arquivo Excel ou, no nosso caso, um arquivo CSV. Quando você carrega o caminho do arquivo CSV em um objeto WorkBook, o IronXL trata o arquivo CSV como uma planilha/tabela de dados.

using IronXL;
using System.Data;

public class CSVReader
{
    // Reads a CSV file and converts it to a DataTable
    public DataTable ReadCSV(string filePath)
    {
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert to DataTable for easier processing
        DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
        return dataTable;
    }
}
using IronXL;
using System.Data;

public class CSVReader
{
    // Reads a CSV file and converts it to a DataTable
    public DataTable ReadCSV(string filePath)
    {
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert to DataTable for easier processing
        DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
        return dataTable;
    }
}
$vbLabelText   $csharpLabel

Passo 2: Estabelecendo uma Conexão com o Banco de Dados

Estabelecer uma conexão com seu banco de dados SQL Server é uma etapa fundamental no processo de armazenamento dos seus dados CSV. Esta etapa envolve a configuração de um link de comunicação entre seu aplicativo e o servidor de banco de dados. Uma conexão bem-sucedida é crucial porque, sem ela, transferir dados para o banco de dados seria impossível.

Esta etapa foca em criar e abrir uma conexão usando uma string de conexão em C#. A string de conexão é um componente vital, pois contém as informações necessárias para estabelecer a conexão. É como uma chave que destranca a porta do seu banco de dados.

using System.Data.SqlClient;

public class DatabaseConnector
{
    // Connection string to connect to the database
    private string connectionString = "your_connection_string_here";

    public SqlConnection ConnectToDatabase()
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
using System.Data.SqlClient;

public class DatabaseConnector
{
    // Connection string to connect to the database
    private string connectionString = "your_connection_string_here";

    public SqlConnection ConnectToDatabase()
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
$vbLabelText   $csharpLabel

A variável connectionString contém todos os detalhes necessários para conectar ao seu SQL Server. Normalmente inclui o nome do servidor, nome do banco de dados, ID do usuário e senha. Um exemplo de string de conexão se parece com isto: Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;. É essencial substituir esses placeholders pelos detalhes reais do seu servidor.

Passo 3: Armazenando Dados no Banco de Dados

Tendo estabelecido uma conexão com o banco de dados SQL Server, o próximo passo crítico é armazenar os dados CSV no banco de dados. Esta etapa envolve transferir os dados que você leu e processou para sua tabela no SQL Server. É uma parte crucial do processo de manipulação de dados, pois envolve a migração real de dados de um arquivo local para um servidor de banco de dados.

Neste passo, focaremos em como os dados CSV, agora armazenados em um DataTable, são transferidos para o banco de dados SQL Server. Usamos uma combinação de recursos do C# e do SQL Server para realizar esta tarefa de forma eficiente.

using System;
using System.Data;
using System.Data.SqlClient;

public class DataImporter
{
    public void ImportData(DataTable dataTable)
    {
        using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
        {
            // Check if the table exists and create it if it does not.
            string tableName = "CSVData"; // Use a valid SQL table name format
            string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
            string createTable = "CREATE TABLE " + tableName + " (";
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                createTable += $"[{dataTable.Columns[i].ColumnName}] NVARCHAR(MAX)";
                if (i < dataTable.Columns.Count - 1)
                    createTable += ", ";
            }
            createTable += ") END";
            SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
            createTableCommand.ExecuteNonQuery();

            // Now we use SqlBulkCopy to import the data
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = tableName;
                try
                {
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("Data imported successfully!");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}
using System;
using System.Data;
using System.Data.SqlClient;

public class DataImporter
{
    public void ImportData(DataTable dataTable)
    {
        using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
        {
            // Check if the table exists and create it if it does not.
            string tableName = "CSVData"; // Use a valid SQL table name format
            string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
            string createTable = "CREATE TABLE " + tableName + " (";
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                createTable += $"[{dataTable.Columns[i].ColumnName}] NVARCHAR(MAX)";
                if (i < dataTable.Columns.Count - 1)
                    createTable += ", ";
            }
            createTable += ") END";
            SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
            createTableCommand.ExecuteNonQuery();

            // Now we use SqlBulkCopy to import the data
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = tableName;
                try
                {
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("Data imported successfully!");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}
$vbLabelText   $csharpLabel

Começa abrindo uma conexão com o banco de dados SQL Server usando a classe DatabaseConnector, garantindo um caminho para transações de dados. O método verifica a existência da tabela chamada 'CSVData' dentro do banco de dados.

Se a tabela não for encontrada, ele procede para criá-la. O esquema da tabela é construído com base no esquema DataTable passado para o método, com todas as colunas definidas como NVARCHAR(MAX) para acomodar qualquer dado textual. Esta é uma abordagem genérica e pode necessitar de refinamento para corresponder mais de perto aos tipos de dados específicos.

Depois disso, um comando SQL é formulado e executado para verificar a existência da tabela ou criá-la. Isso garante que a operação de cópia em massa subsequente tenha uma tabela de destino pronta para inserção de dados. Com a tabela pronta, a classe SqlBulkCopy é empregada para transferir dados do DataTable diretamente para a tabela SQL Server. Esta operação é projetada para transferências de dados em massa de alto desempenho, tornando-a adequada para lidar com grandes volumes de dados de maneira eficiente.

Passo 4: Colocando Tudo Junto

Após trabalhar diligentemente nos passos anteriores de ler dados CSV, estabelecer uma conexão com o banco de dados e preparar a transferência de dados, chegamos à etapa final e crucial: integrar esses componentes individuais em um processo coeso.

Essa integração é realizada no método Main do seu aplicativo C#, onde tudo se junta, permitindo a execução real da importação de dados do arquivo CSV para o banco de dados SQL Server.

class Program
{
    static void Main(string[] args)
    {
        string filePath = "path_to_your_csv_file.csv";
        CSVReader reader = new CSVReader();
        DataTable dataTable = reader.ReadCSV(filePath);
        DataImporter importer = new DataImporter();
        importer.ImportData(dataTable);
        Console.WriteLine("Data imported successfully!");
    }
}
class Program
{
    static void Main(string[] args)
    {
        string filePath = "path_to_your_csv_file.csv";
        CSVReader reader = new CSVReader();
        DataTable dataTable = reader.ReadCSV(filePath);
        DataImporter importer = new DataImporter();
        importer.ImportData(dataTable);
        Console.WriteLine("Data imported successfully!");
    }
}
$vbLabelText   $csharpLabel

Substitua path_to_your_csv_file.csv pelo caminho para o seu arquivo CSV.

Executando o Projeto

Uma vez que você execute o projeto, verá a seguinte saída. As mensagens de sucesso representam que todas as operações foram executadas com sucesso e os dados foram copiados para o banco de dados.

Data imported successfully!

Agora, você pode abrir o SQL Server Management Studio (SSMS) e verificar a tabela no banco de dados. Você verá os seguintes dados na tabela.

Como Ler Dados de Arquivo CSV e Armazená-los no Banco de Dados C#: Figura 1 - Banco de dados de saída

Conclusão

Este tutorial orientou você pelo processo de leitura de dados de um arquivo CSV e armazenamento em um banco de dados SQL Server usando C#. Seguindo estes passos e utilizando a biblioteca IronXL, você pode gerenciar dados CSV de forma eficiente em suas aplicações C#.

A IronXL oferece uma versão de teste gratuita para os usuários experimentarem seus recursos antes de se comprometerem com uma compra. Este teste totalmente funcional permite que os usuários em potencial testem e avaliem o produto em um ambiente real sem marcas d'água em produção. Após o período de teste, se você decidir continuar usando o IronXL para seus projetos, a licença do produto começa a partir de $799.

Perguntas frequentes

Como posso ler dados de um arquivo CSV em C#?

É possível ler dados de um arquivo CSV em C# usando a biblioteca IronXL. A IronXL fornece as classes `WorkBook` e `WorkSheet`, que permitem carregar e manipular arquivos CSV como se fossem planilhas do Excel.

Quais são os passos para armazenar dados CSV em um banco de dados SQL Server usando C#?

Para armazenar dados CSV em um banco de dados SQL Server usando C#, primeiro leia o CSV usando o IronXL, depois carregue os dados em um `DataTable` e use o `SqlBulkCopy` para inserir os dados de forma eficiente em uma tabela do SQL Server.

Como faço para instalar o IronXL para usar no meu projeto C#?

Você pode instalar o IronXL em seu projeto C# usando o Gerenciador de Pacotes NuGet no Visual Studio. Procure por 'IronXL' no Gerenciador de Pacotes NuGet e adicione-o ao seu projeto.

Qual é a principal vantagem de usar o IronXL para manipular arquivos CSV em C#?

A principal vantagem de usar o IronXL para lidar com arquivos CSV em C# é sua capacidade de gerenciar e manipular arquivos CSV e Excel de forma integrada em aplicativos .NET, oferecendo compatibilidade com diversas versões do .NET e sistemas operacionais.

Posso usar o IronXL para lidar com arquivos Excel, assim como com arquivos CSV?

Sim, o IronXL foi projetado para lidar com arquivos Excel e CSV, tornando-se uma ferramenta versátil para gerenciar dados de planilhas em aplicativos .NET.

O que devo fazer se encontrar erros ao usar o IronXL para ler arquivos CSV?

Se você encontrar erros ao usar o IronXL para ler arquivos CSV, verifique se o arquivo CSV está formatado corretamente e se o IronXL está instalado corretamente em seu projeto. Você pode consultar a documentação do IronXL para obter dicas de solução de problemas.

Como posso testar a funcionalidade do IronXL antes de efetuar a compra?

A IronXL oferece um período de teste gratuito e totalmente funcional, permitindo que você teste e avalie o produto sem restrições em um ambiente de produção.

Quais são os pré-requisitos para usar o IronXL para armazenar dados CSV em um banco de dados?

Os pré-requisitos incluem ter o Visual Studio instalado, acesso ao SQL Server e o IronXL instalado via NuGet. Você também precisa configurar uma tabela no SQL Server para armazenar os dados CSV.

Jordi Bardia
Engenheiro de Software
Jordi é extremamente proficiente em Python, C# e C++, e quando não está utilizando suas habilidades na Iron Software, dedica-se à programação de jogos. Compartilhando as responsabilidades por testes, desenvolvimento e pesquisa de produtos, Jordi agrega imenso valor à melhoria contínua dos produtos. Essa experiência diversificada o mantém ...
Leia mais

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me