Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
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#.
Configure su entorno de desarrollo
Prepare su archivo Excel
Conéctese a su base de datos SQL Server
Leer datos de archivos de Excel usando IronXL
Exportación de datos y generación de informes en PDF con IronPDF
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.
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.
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.
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.
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:
Abra Visual Studio: Asegúrate de haber instalado Visual Studio en tu ordenador antes de abrirlo.
Iniciar un nuevo proyecto: Seleccione Archivo
-> Nuevo
-> Proyecto
.
En el panel izquierdo del cuadro "Crear un nuevo proyecto", elija el lenguaje de programación que prefiera, por ejemplo, C#.
Seleccione la Console App
o la Console App(.NET Core)
plantilla de la lista de plantillas de proyecto disponibles.
En el área Nombre, dé un nombre a su proyecto.
Decide una ubicación para guardar el proyecto.
Haga clic en Crear para iniciar un proyecto de aplicación para una Consola.
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
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.
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
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
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
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.
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.
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
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.
9 productos API .NET para sus documentos de oficina