Saltar al pie de página
USANDO IRONXL

Cómo leer un archivo CSV en un DataTable en C#

Trabajar con archivos CSV es una tarea común para los desarrolladores .NET, ya sea que estés importando informes de ventas, procesando inventarios o sincronizando registros de clientes. Convertir un archivo CSV en un DataTable facilita su manipulación, análisis o inserción en una tabla de base de datos.

Leer archivos CSV en C# puede ser complicado: archivos grandes, diferentes delimitadores o comas incrustadas a menudo requieren un análisis complejo o Excel. IronXL simplifica esto: con solo unas pocas líneas de código, puedes leer archivos CSV desde cualquier ruta de archivo, convertirlos en un DataTable con los encabezados de columna adecuados y prepararlos para operaciones masivas de bases de datos, todo sin Excel.

En esta guía, aprenderás a:

  • Cargar un archivo CSV en un DataTable en C#
  • Manejar diferentes delimitadores como comas, tabulaciones o punto y coma
  • Importar tu DataTable directamente en SQL Server de manera eficiente
  • Gestionar grandes conjuntos de datos de manera confiable sin problemas de memoria

Al final, tendrás un flujo de trabajo completo y práctico para convertir datos CSV en información procesable utilizando IronXL en tus aplicaciones .NET.

¿Por qué es esencial la conversión de CSV a DataTable?

La conversión de CSV a DataTable permite a los desarrolladores transformar valores separados por comas (datos CSV) en objetos estructurados como un DataTable para posterior procesamiento. Ya sea que estés manejando datos de inventario, registros de clientes o registros de transacciones, poder convertir CSV a un DataTable nuevo de manera eficiente es crucial. Usando la primera fila como encabezados de columna, puedes asegurarte de que las columnas del DataTable coincidan con el esquema de la tabla de tu base de datos.

Los enfoques tradicionales a menudo enfrentan dificultades con archivos grandes, diferentes delimitadores o gestión de memoria. IronXL elimina estos desafíos y maneja diferentes delimitadores, campos entre comillas y comas incrustadas sin problemas. Las capacidades de lectura de CSV de IronXL eliminan estos problemas comunes.

¿Cómo instalar IronXL?

Comenzar con IronXL solo requiere una simple instalación del paquete NuGet. Abre la Consola del Administrador de Paquetes NuGet en Visual Studio y ejecuta:

Install-Package IronXL.Excel

Una vez instalado, agrega el espacio de nombres IronXL a tu proyecto:

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

Esto proporciona acceso a todas las potentes capacidades de procesamiento de CSV sin ninguna dependencia de Excel. Para más detalles sobre la extensa API de IronXL, consulta la Documentación de Referencia API.

NuGet Instalar con NuGet

PM >  Install-Package IronXL.Excel

Echa un vistazo a IronXL en NuGet para una instalación rápida. Con más de 10 millones de descargas, está transformando el desarrollo de PDF con C#. También puede descargar el DLL.

¿Cómo convertir CSV a DataTable?

La belleza de IronXL reside en su simplicidad. Aquí te mostramos cómo leer un archivo CSV y convertirlo en un DataTable:

// Load CSV file into a WorkBook object
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", 
    fileFormat: ExcelFileFormat.XLSX);
// Access the default worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable with headers
DataTable dataTable = worksheet.ToDataTable(true);
// Display the data
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
// Load CSV file into a WorkBook object
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", 
    fileFormat: ExcelFileFormat.XLSX);
// Access the default worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable with headers
DataTable dataTable = worksheet.ToDataTable(true);
// Display the data
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El método LoadCSV analiza inteligentemente tu archivo CSV, manejando automáticamente casos comunes como campos entre comillas y comas incrustadas. El parámetro fileFormat indica a IronXL cómo interpretar los datos CSV internamente, asegurando que se traten como una estructura compatible con Excel. Una vez cargado, el método ToDataTable(true) convierte la hoja de trabajo en un DataTable, con el parámetro true indicando que la primera fila debe usarse como encabezados de columna. Esto da como resultado un DataTable limpio y estructurado con columnas nombradas que coinciden con los encabezados de tu CSV. Para más opciones de manipulación avanzada, explora el tutorial completo de Excel a DataTable.

¿Cómo importar DataTable en SQL Server?

Una vez que tienes tu DataTable, importarlo en SQL Server se vuelve notablemente eficiente usando SqlBulkCopy:

using System.Data;
using Microsoft.Data.SqlClient;
using IronXL;
class Program
{
    static void Main(string[] args)
    {
        // Create connection string
        string connectionString = @"Data Source=localhost;Initial Catalog=SalesDB;
                           Integrated Security=True;TrustServerCertificate=True;";
        // Read CSV into DataTable
        WorkBook workbook = WorkBook.LoadCSV("inventory_report.csv");
        DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
        // Bulk insert into SQL Server
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                // Set destination table name
                bulkCopy.DestinationTableName = "dbo.Inventory";
                // Map DataTable columns to SQL table columns
                bulkCopy.ColumnMappings.Add("ProductCode", "product_code");
                bulkCopy.ColumnMappings.Add("Quantity", "quantity");
                bulkCopy.ColumnMappings.Add("LastUpdated", "last_updated");
                // Set batch size for better performance
                bulkCopy.BatchSize = 1000;
                // Write data to SQL Server
                bulkCopy.WriteToServer(dataTable);
            }
        }
        Console.WriteLine($"Successfully imported {dataTable.Rows.Count} records");
    }
}
using System.Data;
using Microsoft.Data.SqlClient;
using IronXL;
class Program
{
    static void Main(string[] args)
    {
        // Create connection string
        string connectionString = @"Data Source=localhost;Initial Catalog=SalesDB;
                           Integrated Security=True;TrustServerCertificate=True;";
        // Read CSV into DataTable
        WorkBook workbook = WorkBook.LoadCSV("inventory_report.csv");
        DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
        // Bulk insert into SQL Server
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                // Set destination table name
                bulkCopy.DestinationTableName = "dbo.Inventory";
                // Map DataTable columns to SQL table columns
                bulkCopy.ColumnMappings.Add("ProductCode", "product_code");
                bulkCopy.ColumnMappings.Add("Quantity", "quantity");
                bulkCopy.ColumnMappings.Add("LastUpdated", "last_updated");
                // Set batch size for better performance
                bulkCopy.BatchSize = 1000;
                // Write data to SQL Server
                bulkCopy.WriteToServer(dataTable);
            }
        }
        Console.WriteLine($"Successfully imported {dataTable.Rows.Count} records");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La clase SqlBulkCopy proporciona un rendimiento excepcional para importaciones de datos a gran escala. La colección ColumnMappings te permite mapear columnas de DataTable a columnas de base de datos con nombres diferentes, asegurando flexibilidad en tu esquema de datos. La propiedad BatchSize optimiza el uso de memoria procesando registros en bloques en lugar de cargar todo de una vez. Este enfoque puede manejar milones de registros de manera eficiente, lo que lo hace ideal para operaciones de datos de escala empresarial. Aprende más sobre las capacidades de DataSet y DataTable de IronXL.

Resultado

Aquí, podemos usar la consulta *SELECT FROM dbo.Inventory;** en SSMS para verificar que nuestros datos CSV realmente se hayan importado en el SQL Server. Primero, echemos un vistazo a los datos que usamos en nuestro archivo CSV de ejemplo:

Cómo leer un archivo CSV en un DataTable en C#: Figura 2 - Datos de ejemplo CSV

Ahora, si miras el resultado de nuestra consulta, podemos ver que ha copiado exitosamente cada columna, encabezado y fila en la tabla de la base de datos.

Cómo leer un archivo CSV en un DataTable en C#: Figura 3 - Vista de base de datos que muestra los registros importados

¿Cómo manejar diferentes delimitadores?

No todos los archivos CSV usan comas. IronXL maneja sin problemas varios delimitadores:

using IronXL;
using System;
using System.Data;
using System.IO;
class Program
{
    static void Main()
    {
        // --- Tab-delimited file ---
        string tsvPath = @"export_data.tsv";
        WorkBook tsvWorkbook = WorkBook.LoadCSV(tsvPath, ExcelFileFormat.XLSX, "\t");
        // --- Semicolon-delimited file ---
        string semiPath = @"european_data.csv";
        string tempCsv = Path.Combine(Path.GetTempPath(), "european_data_comma.csv");
        // Replace semicolons with commas for proper parsing
        var lines = File.ReadAllLines(semiPath);
        for (int i = 0; i < lines.Length; i++)
        {
            lines[i] = lines[i].Replace(';', ',');
        }
        File.WriteAllLines(tempCsv, lines);
        WorkBook semiWorkbook = WorkBook.LoadCSV(tempCsv, ExcelFileFormat.XLSX);
        // Print both workbooks
        PrintWorkbook(tsvWorkbook, "Tab-delimited File");
        PrintWorkbook(semiWorkbook, "Semicolon-delimited File");
    }
    static void PrintWorkbook(WorkBook workbook, string name)
    {
        Console.WriteLine($"\n--- {name} ---\n");
        DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
        // Print column headers
        foreach (DataColumn col in dt.Columns)
        {
            Console.Write($"{col.ColumnName}\t");
        }
        Console.WriteLine();
        // Print rows
        foreach (DataRow row in dt.Rows)
        {
            foreach (var item in row.ItemArray)
            {
                Console.Write($"{item}\t");
            }
            Console.WriteLine();
        }
    }
}
using IronXL;
using System;
using System.Data;
using System.IO;
class Program
{
    static void Main()
    {
        // --- Tab-delimited file ---
        string tsvPath = @"export_data.tsv";
        WorkBook tsvWorkbook = WorkBook.LoadCSV(tsvPath, ExcelFileFormat.XLSX, "\t");
        // --- Semicolon-delimited file ---
        string semiPath = @"european_data.csv";
        string tempCsv = Path.Combine(Path.GetTempPath(), "european_data_comma.csv");
        // Replace semicolons with commas for proper parsing
        var lines = File.ReadAllLines(semiPath);
        for (int i = 0; i < lines.Length; i++)
        {
            lines[i] = lines[i].Replace(';', ',');
        }
        File.WriteAllLines(tempCsv, lines);
        WorkBook semiWorkbook = WorkBook.LoadCSV(tempCsv, ExcelFileFormat.XLSX);
        // Print both workbooks
        PrintWorkbook(tsvWorkbook, "Tab-delimited File");
        PrintWorkbook(semiWorkbook, "Semicolon-delimited File");
    }
    static void PrintWorkbook(WorkBook workbook, string name)
    {
        Console.WriteLine($"\n--- {name} ---\n");
        DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
        // Print column headers
        foreach (DataColumn col in dt.Columns)
        {
            Console.Write($"{col.ColumnName}\t");
        }
        Console.WriteLine();
        // Print rows
        foreach (DataRow row in dt.Rows)
        {
            foreach (var item in row.ItemArray)
            {
                Console.Write($"{item}\t");
            }
            Console.WriteLine();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este código carga archivos CSV con diferentes delimitadores en objetos WorkBook de IronXL. Los archivos delimitados por tabulaciones se leen usando "\t" como separador, mientras que los archivos delimitados por punto y coma se convierten a formato CSV estándar antes de cargarlos. La hoja de trabajo predeterminada de cada libro se convierte en un DataTable con ToDataTable(true), que usa la primera fila como encabezados de columna.

El método PrintWorkbook luego itera a través del DataTable y muestra los datos en la consola, incluidos los encabezados y todas las filas. Esta flexibilidad aborda muchos de los desafíos comunes de análisis de CSV discutidos por los desarrolladores.

Resultado

Como puedes ver en nuestra salida de consola, ambos archivos están correctamente formateados en tablas de datos, a pesar de empezar con diferentes delimitadores.

Cómo leer un archivo CSV en un DataTable en C#: Figura 4 - Salida de diferentes delimitadores

Conclusión

IronXL transforma la compleja tarea de importación de bases de datos CSV en un proceso sencillo y confiable. Con solo unas pocas líneas de código, puedes:

  • Leer archivos CSV desde cualquier ruta de archivo
  • Convertir datos CSV en un nuevo DataTable
  • Preservar encabezados de columna y columnas de DataTable
  • Importar millones de filas en una tabla de base de datos de manera eficiente

La biblioteca maneja automáticamente las complejidades del análisis de CSV, la gestión de memoria y las conversiones de tipos de datos, permitiéndote concentrarte en tu lógica de negocio en lugar de en los detalles del procesamiento de archivos.

¿Listo para optimizar tu flujo de trabajo de importación de datos? Comienza tu prueba gratuita para encontrar el ajuste perfecto para las necesidades de tu equipo.

Preguntas Frecuentes

¿Cuál es la mejor manera de leer archivos CSV en un DataTable en C#?

Usando IronXL, puede leer eficientemente archivos CSV en un DataTable en C# con ejemplos de código simples proporcionados en nuestra guía para desarrolladores.

¿Por qué debería usar IronXL para la conversión de CSV a DataTable?

IronXL ofrece una API sencilla para analizar archivos CSV y convertirlos en DataTables, permitiéndole manipular y analizar fácilmente sus datos en C#.

¿Puede IronXL manejar archivos CSV grandes al convertirlos a DataTables?

Sí, IronXL está diseñado para procesar eficientemente archivos CSV grandes y convertirlos en DataTables sin problemas de rendimiento.

¿IronXL admite la manipulación de datos después de convertir CSV a DataTable?

Absolutamente, una vez que convierte un archivo CSV en un DataTable usando IronXL, puede manipular y analizar los datos fácilmente según sea necesario.

¿Cómo puedo importar datos CSV a una base de datos usando IronXL?

Después de convertir su archivo CSV en un DataTable con IronXL, puede insertar los datos en una base de datos usando conectividad estándar de bases de datos en C#.

¿Es adecuado IronXL para procesar archivos CSV en aplicaciones empresariales?

Sí, IronXL está diseñado para manejar tareas de procesamiento de CSV en aplicaciones empresariales, ofreciendo un rendimiento sólido y confiabilidad.

¿Cuáles son las ventajas de convertir archivos CSV a DataTables en C#?

Convertir archivos CSV a DataTables permite una manipulación, análisis e integración de datos más fácil con bases de datos, mejorando las capacidades de manejo de datos de su aplicación.

¿Puede usarse IronXL para otros tipos de archivos de hojas de cálculo además de CSV?

Sí, IronXL admite varios tipos de archivos de hojas de cálculo, incluidos los formatos de Excel, lo que permite capacidades versátiles de procesamiento de datos en C#.

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más