USO DE IRONXL

Cómo importar Excel a SQL Server en C#

Publicado en 1 de julio, 2024
Compartir:

Introducción

En muchos contextos empresariales diferentes, la importación de datos de Excel a SQL Server es una necesidad típica. Leer datos de un archivo Excel e introducirlos en una base de datos SQL Server son las tareas que conlleva esta actividad. Aunque a menudo se utiliza el asistente de exportación, IronXL proporciona un enfoque más programático y flexible para el manejo de datos. IronXL es una potente biblioteca de C# que puede importar datos de Excel desde archivos; por lo tanto, es posible agilizar esta operación. Para ello, este post ofrecerá una completa guía práctica que aborda la configuración, ejecución y mejora de la importación de Excel a SQL Server utilizando C#.

Cómo Importar Excel a SQL Server en C#: Figura 1 - IronXL: La librería Excel en C#

Cómo importar Excel a SQL Server en C

  1. Configure su entorno de desarrollo

  2. Prepare su archivo Excel

  3. Conéctese a su base de datos SQL Server

  4. Leer datos de archivos de Excel usando IronXL

  5. Exportación de datos y generación de informes en PDF con IronPDF

  6. Revisar el informe en PDF

¿Qué es IronXL?

IronXL, a veces denominada IronXL.Excel, es una biblioteca de C# repleta de funciones creada para facilitar el trabajo con archivos de Excel en aplicaciones .NET. Esta robusta herramienta es ideal para aplicaciones del lado del servidor, ya que permite a los desarrolladores leer, crear y editar archivos Excel sin necesidad de instalar Microsoft Excel en el ordenador. Excel 2007 y versiones posteriores (.xlsx) y Excel 97-2003 (.xls) son compatibles con IronXL, lo que proporciona versatilidad en la gestión de varias versiones de archivos de Excel. Permite una importante manipulación de datos, como manipular hojas de cálculo, filas y columnas, además de insertar, actualizar y eliminar datos.

IronXL también es compatible con el formato de celdas y las fórmulas de Excel, lo que permite generar de forma programada hojas de cálculo complejas y bien formateadas. Con su optimización del rendimiento y su compatibilidad con múltiples plataformas .NET, incluidas .NET Framework, .NET Core y .NET 5/6, IronXL garantiza un manejo eficaz de enormes conjuntos de datos. Es una opción flexible para los desarrolladores que deseen integrar operaciones con archivos de Excel en sus aplicaciones, ya sea para actividades sencillas de importación y exportación de datos o para intrincados sistemas de generación de informes, gracias a su interfaz fluida con otros marcos .NET.

Características principales

Leer y escribir archivos Excel

Los desarrolladores pueden leer y escribir datos desde y hacia archivos de Excel utilizando IronXL. Es muy sencillo crear nuevos archivos Excel y editar los que ya existen.

No es necesario instalar Microsoft Excel

IronXL no requiere la instalación de Microsoft Excel en el ordenador que aloja la aplicación, a diferencia de otras bibliotecas. Por eso es perfecto para aplicaciones del lado del servidor.

Compatibilidad con varios formatos de Excel

La biblioteca ofrece versatilidad en la gestión de varios tipos de archivos Excel al admitir el formato .xls (Excel 97-2003) y .xlsx (Excel 2007 y versiones posteriores) formatos.

Crear un nuevo proyecto de Visual Studio

Un proyecto de consola de Visual Studio es fácil de crear. En Visual Studio, realice las siguientes acciones para crear una aplicación de consola:

  1. Abra Visual Studio: Asegúrate de haber instalado Visual Studio en tu ordenador antes de abrirlo.

  2. Iniciar un nuevo proyecto: Seleccione Archivo -> Nuevo -> Proyecto.

    Cómo Importar Excel a SQL Server en C#: Figura 2 - Haga clic en Nuevo

  3. En el panel izquierdo del cuadro "Crear un nuevo proyecto", elija el lenguaje de programación que prefiera, por ejemplo, C#.

  4. Seleccione la Console App o la Console App (.NET Core) plantilla de la lista de plantillas de proyecto disponibles.

  5. En el área Nombre, dé un nombre a su proyecto.

    Cómo importar Excel a SQL Server en C#: Figura 3 - Proporcionar un nombre y una ubicación para guardar

  6. Decide una ubicación para guardar el proyecto.

  7. Haga clic en Crear para iniciar un proyecto de aplicación para una Consola.

    Cómo importar Excel a SQL Server en C#: Figura 4 - Finalmente haga clic en crear para lanzar una aplicación

Instalación de la biblioteca IronXL

Es necesario instalar la biblioteca IronXL debido a la próxima actualización. Por último, para finalizar el procedimiento, inicie la consola de NuGet Package Manager y escriba el siguiente comando:

Install-Package IronXL.Excel

Cómo Importar Excel a SQL Server en C#: Figura 5 - Introduzca el comando anterior en la consola de NuGet Package Manager para instalar IronXL

Otro método es utilizar el gestor de paquetes NuGet para buscar el paquete IronXL. Esto nos permite seleccionar cuál de los paquetes NuGet vinculados a IronXL descargar.

Cómo Importar Excel a SQL Server en C#: Figura 6 - Alternativamente busque IronXL usando el Gestor de Paquetes NuGet e instálelo

Importar Excel a SQL con IronXL

Lectura de datos de Excel con IronXL

El proceso de lectura de datos de archivos de Excel es más fácil con IronXL. El siguiente ejemplo muestra cómo utilizar IronXL para leer datos de un archivo de Excel. Con este enfoque, los datos se leen y se guardan en una lista de diccionarios, cada uno de los cuales corresponde a una fila de la hoja de Excel.

using IronXL;
using System;
using System.Collections.Generic;

public class ExcelReader
{
    public static List<Dictionary<string, object>> ReadExcelFile(string filePath)
    {
        var data = new List<Dictionary<string, object>>();
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.WorkSheets[0];

        var headers = new List<string>();
        foreach (var header in sheet.Rows[0].Columns)
        {
            headers.Add(header.ToString());
        }

        for (int i = 1; i < sheet.Rows.Count; i++)
        {
            var rowData = new Dictionary<string, object>();
            for (int j = 0; j < headers.Count; j++)
            {
                rowData[headers[j]] = sheet.Rows[i][j].Value;
            }
            data.Add(rowData);
        }

        return data;
    }
}
using IronXL;
using System;
using System.Collections.Generic;

public class ExcelReader
{
    public static List<Dictionary<string, object>> ReadExcelFile(string filePath)
    {
        var data = new List<Dictionary<string, object>>();
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.WorkSheets[0];

        var headers = new List<string>();
        foreach (var header in sheet.Rows[0].Columns)
        {
            headers.Add(header.ToString());
        }

        for (int i = 1; i < sheet.Rows.Count; i++)
        {
            var rowData = new Dictionary<string, object>();
            for (int j = 0; j < headers.Count; j++)
            {
                rowData[headers[j]] = sheet.Rows[i][j].Value;
            }
            data.Add(rowData);
        }

        return data;
    }
}
Imports IronXL
Imports System
Imports System.Collections.Generic

Public Class ExcelReader
	Public Shared Function ReadExcelFile(ByVal filePath As String) As List(Of Dictionary(Of String, Object))
		Dim data = New List(Of Dictionary(Of String, Object))()
		Dim workbook As WorkBook = WorkBook.Load(filePath)
		Dim sheet As WorkSheet = workbook.WorkSheets(0)

		Dim headers = New List(Of String)()
		For Each header In sheet.Rows(0).Columns
			headers.Add(header.ToString())
		Next header

		For i As Integer = 1 To sheet.Rows.Count - 1
			Dim rowData = New Dictionary(Of String, Object)()
			For j As Integer = 0 To headers.Count - 1
				rowData(headers(j)) = sheet.Rows(i)(j).Value
			Next j
			data.Add(rowData)
		Next i

		Return data
	End Function
End Class
VB   C#

Conexión a SQL Server

Utilice la clase SqlConnection del espacio de nombres System.Data.SqlClient para establecer una conexión con SQL Server. Asegúrate de que tienes la cadena de conexión correcta, que normalmente consiste en el nombre de la base de datos, el nombre del servidor y la información de autenticación. En el siguiente ejemplo se explica cómo conectarse a una base de datos SQL Server y añadir datos.

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

public class SqlServerConnector
{
    private string connectionString;

    public SqlServerConnector(string connectionString)
    {
        this.connectionString = connectionString;
    }

    public void InsertData(Dictionary<string, object> data, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            var columns = string.Join(",", data.Keys);
            var parameters = string.Join(",", data.Keys.Select(key => "@" + key));
            string query = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                foreach (var kvp in data)
                {
                    command.Parameters.AddWithValue("@" + kvp.Key, kvp.Value ?? DBNull.Value);
                }
                command.ExecuteNonQuery();
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

public class SqlServerConnector
{
    private string connectionString;

    public SqlServerConnector(string connectionString)
    {
        this.connectionString = connectionString;
    }

    public void InsertData(Dictionary<string, object> data, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            var columns = string.Join(",", data.Keys);
            var parameters = string.Join(",", data.Keys.Select(key => "@" + key));
            string query = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                foreach (var kvp in data)
                {
                    command.Parameters.AddWithValue("@" + kvp.Key, kvp.Value ?? DBNull.Value);
                }
                command.ExecuteNonQuery();
            }
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Data.SqlClient
Imports System.Linq

Public Class SqlServerConnector
	Private connectionString As String

	Public Sub New(ByVal connectionString As String)
		Me.connectionString = connectionString
	End Sub

	Public Sub InsertData(ByVal data As Dictionary(Of String, Object), ByVal tableName As String)
		Using connection As New SqlConnection(connectionString)
			connection.Open()
			Dim columns = String.Join(",", data.Keys)
			Dim parameters = String.Join(",", data.Keys.Select(Function(key) "@" & key))
			Dim query As String = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})"

			Using command As New SqlCommand(query, connection)
				For Each kvp In data
					command.Parameters.AddWithValue("@" & kvp.Key, If(kvp.Value, DBNull.Value))
				Next kvp
				command.ExecuteNonQuery()
			End Using
		End Using
	End Sub
End Class
VB   C#

Combinación de IronXL con SQL Server

Una vez establecida la lógica para leer archivos Excel e insertar datos en una base de datos SQL, integre estas funciones para finalizar el proceso de importación. La aplicación que sigue recibe información de un archivo Excel y la añade a una base de datos Microsoft SQL Server.

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        string excelFilePath = "path_to_your_excel_file.xlsx";
        string connectionString = "your_sql_server_connection_string";
        string tableName = "your_table_name";

        // Read data from Excel
        List<Dictionary<string, object>> excelData = ExcelReader.ReadExcelFile(excelFilePath);

        // Insert data into SQL Server
        SqlServerConnector sqlConnector = new SqlServerConnector(connectionString);
        foreach (var row in excelData)
        {
            sqlConnector.InsertData(row, tableName);
        }

        Console.WriteLine("Data import completed successfully.");
    }
}
using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        string excelFilePath = "path_to_your_excel_file.xlsx";
        string connectionString = "your_sql_server_connection_string";
        string tableName = "your_table_name";

        // Read data from Excel
        List<Dictionary<string, object>> excelData = ExcelReader.ReadExcelFile(excelFilePath);

        // Insert data into SQL Server
        SqlServerConnector sqlConnector = new SqlServerConnector(connectionString);
        foreach (var row in excelData)
        {
            sqlConnector.InsertData(row, tableName);
        }

        Console.WriteLine("Data import completed successfully.");
    }
}
Imports System
Imports System.Collections.Generic

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim excelFilePath As String = "path_to_your_excel_file.xlsx"
		Dim connectionString As String = "your_sql_server_connection_string"
		Dim tableName As String = "your_table_name"

		' Read data from Excel
		Dim excelData As List(Of Dictionary(Of String, Object)) = ExcelReader.ReadExcelFile(excelFilePath)

		' Insert data into SQL Server
		Dim sqlConnector As New SqlServerConnector(connectionString)
		For Each row In excelData
			sqlConnector.InsertData(row, tableName)
		Next row

		Console.WriteLine("Data import completed successfully.")
	End Sub
End Class
VB   C#

Esta clase se encarga de utilizar IronXL para leer los datos del archivo Excel dado. La función ReadExcelFile carga el libro de Excel, abre la primera hoja de cálculo, y recoge los datos haciendo un bucle a través de las filas de la hoja de cálculo de datos. Para facilitar el manejo de las tablas, la información se guarda en una lista de diccionarios.

Cómo Importar Excel a SQL Server en C#: Figura 7 - Ejemplo de archivo Excel de entrada

Los datos se insertan en la tabla de base de datos designada por esta clase, que también gestiona la conexión a la base de datos SQL Server. El método InsertData emplea consultas parametrizadas para evitar la inyección SQL y construye una consulta SQL INSERT de forma dinámica basándose en las claves del diccionario, que sustituyen a los nombres de las columnas.

Utilizando la clase ExcelReader para leer los datos en la tabla SQL desde el fichero Excel y la clase SqlServerConnector para insertar cada fila en la tabla SQL Server, la función Main gestiona todo el proceso.

Cómo importar Excel a SQL Server en C#: Figura 8 - Resultado de la consulta realizada con éxito en el servidor SQL

El tratamiento de errores y la optimización son cruciales para garantizar un proceso de importación sólido y eficaz. La implementación de un tratamiento de errores sólido puede gestionar problemas potenciales como archivos que faltan, formatos de datos no válidos y excepciones SQL. He aquí un ejemplo de incorporación de la gestión de errores.

try
{
    // Insert the importing logic here
}
catch(Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
try
{
    // Insert the importing logic here
}
catch(Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
Try
	' Insert the importing logic here
Catch ex As Exception
	Console.WriteLine("An error occurred: " & ex.Message)
End Try
VB   C#

Conclusión

Por último, un método eficaz y fiable para gestionar archivos de Excel dentro de aplicaciones .NET es importar datos de Excel a una base de datos MS SQL utilizando C# e IronXL. IronXL es compatible con múltiples formatos de Excel y cuenta con potentes funciones que facilitan la lectura y escritura de datos de Excel sin necesidad de instalar Microsoft Excel. Gracias a la integración de System.Data.SqlClient con IronXL, los desarrolladores pueden mover datos fácilmente entre servidores SQL utilizando consultas parametrizadas para mejorar la seguridad y evitar la inyección de SQL.

Por último, la adición de IronXL y Iron Software a su conjunto de herramientas para el desarrollo .NET le permite manipular eficazmente Excel, crear archivos PDF, realizar OCR y utilizar códigos de barras. La combinación de la suite flexible de Iron Software con la sencillez de uso, la interoperabilidad y el rendimiento de IronXL garantiza un desarrollo optimizado y una mejora de las capacidades de las aplicaciones. Con opciones de licencia claras y adaptadas a los requisitos del proyecto, los desarrolladores pueden seleccionar el modelo adecuado con confianza. Aprovechando estas ventajas, los desarrolladores pueden hacer frente con eficacia a toda una serie de dificultades, manteniendo al mismo tiempo la conformidad y la apertura.

< ANTERIOR
Cómo trabajar con archivos de Excel en C#
SIGUIENTE >
Cómo Autoajustar Celdas en Excel Usando C#

¿Listo para empezar? Versión: 2024.9 acaba de salir

Descarga gratuita de NuGet Descargas totales: 1,013,614 Ver licencias >