Passer au contenu du pied de page
UTILISATION D'IRONXL

Comment importer Excel vers SQL Server en C#

Dans de nombreux contextes commerciaux différents, l'importation de données d'Excel vers SQL Server est une nécessité courante. Cette activité consiste à lire des données à partir d'un fichier Excel et à les saisir dans une base de données SQL Server. Bien que l'assistant d'exportation soit souvent utilisé, IronXL offre une approche plus programmatique et flexible de la gestion des données. IronXL est une puissante bibliothèque C# capable d'importer des données Excel à partir de fichiers ; Il est donc possible d'accélérer cette opération. À cette fin, cet article propose un guide pratique détaillé qui aborde la configuration, l'exécution et l'amélioration de l'importation de fichiers Excel vers SQL Server à l'aide de C#.

Comment importer un fichier Excel dans SQL Server en C# : Figure 1 - IronXL : La bibliothèque Excel pour C#

Comment importer un fichier Excel dans SQL Server en C

  1. Configurez votre environnement de développement
  2. Préparez votre fichier Excel
  3. Connectez-vous à votre base de données SQL Server
  4. Lire les données des fichiers Excel à l'aide d'IronXL
  5. Exporter les données et générer un rapport PDF à l'aide d'IronPDF
  6. Examiner le rapport PDF

Qu'est-ce qu'IronXL ?

IronXL, parfois appelé IronXL.Excel, est une bibliothèque C# riche en fonctionnalités conçue pour faciliter le travail avec les fichiers Excel dans les applications .NET. Cet outil performant est idéal pour les applications côté serveur car il permet aux développeurs de lire, de créer et de modifier des fichiers Excel sans avoir besoin d'installer Microsoft Excel sur l'ordinateur. IronXL prend en charge les formats Excel 2007 et versions ultérieures (.xlsx) et Excel 97–2003 (.xls), offrant ainsi une grande polyvalence dans la gestion de différentes versions de fichiers Excel. Il permet une manipulation importante des données, comme la manipulation des feuilles de calcul, des lignes et des colonnes, en plus de l'insertion, de la mise à jour et de la suppression des données.

IronXL prend également en charge la mise en forme des cellules et les formules Excel, permettant la génération programmée de feuilles de calcul complexes et bien formatées. Grâce à son optimisation des performances et à sa compatibilité avec de multiples plateformes .NET, notamment .NET Framework, .NET Core et .NET 5/6, IronXL garantit une gestion efficace des ensembles de données volumineux. Grâce à son interface fluide avec d'autres frameworks .NET, il constitue une option flexible pour les développeurs souhaitant intégrer les opérations sur les fichiers Excel dans leurs applications, que ce soit pour des activités d'importation/exportation de données simples ou des systèmes de reporting complexes.

Fonctionnalités clés

Lire et écrire des fichiers Excel

Les développeurs peuvent lire et écrire des données à partir de fichiers Excel grâce à IronXL. Il est simple de créer de nouveaux fichiers Excel et de modifier ceux qui existent déjà.

Aucune installation requise pour Microsoft Excel

IronXL ne nécessite pas l'installation de Microsoft Excel sur l'ordinateur hébergeant l'application, contrairement à certaines autres bibliothèques. C'est pourquoi c'est parfait pour les applications côté serveur.

Prise en charge de différents formats Excel

La bibliothèque offre une grande polyvalence dans la gestion de différents types de fichiers Excel grâce à la prise en charge des formats .xls (Excel 97-2003) et .xlsx (Excel 2007 et versions ultérieures).

Créer un Nouveau Projet Visual Studio

Créer un projet console Visual Studio est simple. Dans Visual Studio, procédez comme suit pour créer une application console :

  1. Ouvrez Visual Studio : assurez-vous d'avoir installé Visual Studio sur votre ordinateur avant de l'ouvrir.
  2. Démarrer un nouveau projet : Choisissez File -> New -> Project .

Comment importer un fichier Excel dans SQL Server en C# : Figure 2 - Cliquez sur Nouveau

  1. Dans le panneau de gauche de la boîte Create a new project , choisissez votre langage de programmation préféré, par exemple C#.
  2. Sélectionnez le modèle Console App ou Console App (.NET Core) dans la liste des modèles de projet disponibles.
  3. Dans la zone Nom , donnez un nom à votre projet.

Comment importer un fichier Excel dans SQL Server en C# : Figure 3 - Indiquez un nom et un emplacement d'enregistrement

  1. Choisissez un emplacement pour enregistrer le projet.
  2. Cliquez sur Créer pour lancer un projet d'application pour une console.

Comment importer un fichier Excel dans SQL Server en C# : Figure 4 - Cliquez enfin sur " Créer " pour lancer l'application.

Installation de la bibliothèque IronXL

L'installation de la bibliothèque IronXL est requise en raison de la prochaine mise à jour. Enfin, pour terminer la procédure, lancez la console du gestionnaire de packages NuGet et saisissez la commande suivante :

Install-Package IronXL.Excel

Comment importer un fichier Excel dans SQL Server en C# : Figure 5 - Saisissez la commande ci-dessus dans la console du gestionnaire de packages NuGet pour installer IronXL

Une autre méthode consiste à utiliser le gestionnaire de packages NuGet pour rechercher le package IronXL . Cela nous permet de sélectionner les packages NuGet liés à IronXL à télécharger.

Comment importer un fichier Excel dans SQL Server en C# : Figure 6 – Vous pouvez également rechercher IronXL à l'aide du gestionnaire de packages NuGet et l'installer.

Importez des fichiers Excel vers SQL avec IronXL

Lecture de données depuis Excel avec IronXL

IronXL simplifie le processus de lecture des données à partir de fichiers Excel. L'exemple suivant illustre l'utilisation d'IronXL pour lire des données à partir d'un fichier Excel. Cette méthode consiste à lire les données et à les enregistrer dans une liste de dictionnaires, chacun correspondant à une ligne de la feuille Excel.

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

public class ExcelReader
{
    public static List<Dictionary<string, object>> ReadExcelFile(string filePath)
    {
        // Initialize a list to store data from Excel
        var data = new List<Dictionary<string, object>>();

        // Load the workbook from the file path provided
        WorkBook workbook = WorkBook.Load(filePath);

        // Access the first worksheet in the workbook
        WorkSheet sheet = workbook.WorkSheets[0];

        // Retrieve column headers from the first row
        var headers = new List<string>();
        foreach (var header in sheet.Rows[0].Columns)
        {
            headers.Add(header.ToString());
        }

        // Loop through each row starting from the second row
        for (int i = 1; i < sheet.Rows.Count; i++)
        {
            // Create a dictionary to store the row data associated with column headers
            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)
    {
        // Initialize a list to store data from Excel
        var data = new List<Dictionary<string, object>>();

        // Load the workbook from the file path provided
        WorkBook workbook = WorkBook.Load(filePath);

        // Access the first worksheet in the workbook
        WorkSheet sheet = workbook.WorkSheets[0];

        // Retrieve column headers from the first row
        var headers = new List<string>();
        foreach (var header in sheet.Rows[0].Columns)
        {
            headers.Add(header.ToString());
        }

        // Loop through each row starting from the second row
        for (int i = 1; i < sheet.Rows.Count; i++)
        {
            // Create a dictionary to store the row data associated with column headers
            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))
		' Initialize a list to store data from Excel
		Dim data = New List(Of Dictionary(Of String, Object))()

		' Load the workbook from the file path provided
		Dim workbook As WorkBook = WorkBook.Load(filePath)

		' Access the first worksheet in the workbook
		Dim sheet As WorkSheet = workbook.WorkSheets(0)

		' Retrieve column headers from the first row
		Dim headers = New List(Of String)()
		For Each header In sheet.Rows(0).Columns
			headers.Add(header.ToString())
		Next header

		' Loop through each row starting from the second row
		For i As Integer = 1 To sheet.Rows.Count - 1
			' Create a dictionary to store the row data associated with column headers
			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
$vbLabelText   $csharpLabel

Connexion à SQL Server

Utilisez la classe SqlConnection de l'espace de noms System.Data.SqlClient pour établir une connexion à SQL Server. Assurez-vous de disposer de la chaîne de connexion correcte, qui se compose généralement du nom de la base de données, du nom du serveur et des informations d'authentification. L'exemple suivant explique comment se connecter à une base de données SQL Server et y ajouter des données.

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

public class SqlServerConnector
{
    private string connectionString;

    // Constructor accepts a connection string
    public SqlServerConnector(string connectionString)
    {
        this.connectionString = connectionString;
    }

    // Inserts data into the specified table
    public void InsertData(Dictionary<string, object> data, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            // Construct an SQL INSERT command with parameterized values to prevent SQL injection
            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))
            {
                // Add parameters to the command
                foreach (var kvp in data)
                {
                    command.Parameters.AddWithValue("@" + kvp.Key, kvp.Value ?? DBNull.Value);
                }

                // Execute the command
                command.ExecuteNonQuery();
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

public class SqlServerConnector
{
    private string connectionString;

    // Constructor accepts a connection string
    public SqlServerConnector(string connectionString)
    {
        this.connectionString = connectionString;
    }

    // Inserts data into the specified table
    public void InsertData(Dictionary<string, object> data, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            // Construct an SQL INSERT command with parameterized values to prevent SQL injection
            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))
            {
                // Add parameters to the command
                foreach (var kvp in data)
                {
                    command.Parameters.AddWithValue("@" + kvp.Key, kvp.Value ?? DBNull.Value);
                }

                // Execute the command
                command.ExecuteNonQuery();
            }
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Data.SqlClient
Imports System.Linq

Public Class SqlServerConnector
	Private connectionString As String

	' Constructor accepts a connection string
	Public Sub New(ByVal connectionString As String)
		Me.connectionString = connectionString
	End Sub

	' Inserts data into the specified table
	Public Sub InsertData(ByVal data As Dictionary(Of String, Object), ByVal tableName As String)
		Using connection As New SqlConnection(connectionString)
			connection.Open()

			' Construct an SQL INSERT command with parameterized values to prevent SQL injection
			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)
				' Add parameters to the command
				For Each kvp In data
					command.Parameters.AddWithValue("@" & kvp.Key, If(kvp.Value, DBNull.Value))
				Next kvp

				' Execute the command
				command.ExecuteNonQuery()
			End Using
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Combinaison d'IronXL avec SQL Server

Une fois la logique de lecture des fichiers Excel et d'insertion des données dans une base de données SQL établie, intégrez ces fonctionnalités pour finaliser le processus d'importation. L'application qui suit reçoit des informations d'un fichier Excel et les ajoute à une base de données Microsoft SQL Server.

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        // Define the path to the Excel file, SQL connection string, and target table name
        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);

        // Create an instance of the SQL connector and insert data
        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)
    {
        // Define the path to the Excel file, SQL connection string, and target table name
        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);

        // Create an instance of the SQL connector and insert data
        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)
		' Define the path to the Excel file, SQL connection string, and target table name
		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)

		' Create an instance of the SQL connector and insert data
		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
$vbLabelText   $csharpLabel

Cette classe est chargée d'utiliser IronXL pour lire les données d'un fichier Excel donné. La fonction ReadExcelFile charge le classeur Excel, ouvre la première feuille de calcul et récupère les données en parcourant les lignes de cette feuille. Pour faciliter la gestion des tableaux, les informations sont conservées dans une liste de dictionnaires.

Comment importer un fichier Excel dans SQL Server en C# : Figure 7 - Exemple de fichier Excel d'entrée

Cette classe insère les données dans la table de base de données désignée et gère également la connexion à la base de données SQL Server. La méthode InsertData utilise des requêtes paramétrées pour empêcher les injections SQL et construit une requête SQL INSERT de manière dynamique en fonction des clés du dictionnaire, qui représentent les noms de colonnes.

La fonction Main gère l'ensemble du processus en utilisant la classe ExcelReader pour lire les données du fichier Excel dans la table SQL et la classe SqlServerConnector pour insérer chaque ligne dans la table SQL Server.

Comment importer un fichier Excel dans SQL Server en C# : Figure 8 - Résultat illustrant la réussite de la requête sur SQL Server

La gestion des erreurs et l'optimisation sont essentielles pour garantir un processus d'importation robuste et efficace. La mise en œuvre d'une gestion robuste des erreurs permet de gérer les problèmes potentiels tels que les fichiers manquants, les formats de données invalides et les exceptions SQL. Voici un exemple d'intégration de la gestion des erreurs.

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
$vbLabelText   $csharpLabel

Conclusion

Enfin, une méthode efficace et fiable pour gérer les fichiers Excel dans les applications .NET consiste à importer les données d'Excel dans une base de données MS SQL à l'aide de C# et d'IronXL. IronXL est compatible avec de nombreux formats Excel et possède des fonctionnalités puissantes qui facilitent la lecture et l'écriture des données Excel sans qu'il soit nécessaire d'installer Microsoft Excel. Grâce à l'intégration de System.Data.SqlClient avec IronXL, les développeurs peuvent facilement déplacer des données entre serveurs SQL à l'aide de requêtes paramétrées afin d'améliorer la sécurité et d'empêcher les injections SQL.

Enfin, l'ajout d'IronXL et d'Iron Software à votre boîte à outils pour le développement .NET vous permet de manipuler efficacement Excel, de créer des PDF, d'effectuer une reconnaissance optique de caractères (OCR) et d'utiliser des codes-barres. L'association de la suite flexible d'Iron Software avec la simplicité d'utilisation, l'interopérabilité et les performances d'IronXL garantit un développement rationalisé et des capacités applicatives améliorées. Grâce à des options de licence claires et personnalisées en fonction des exigences du projet, les développeurs peuvent choisir le modèle adapté en toute confiance. En tirant parti de ces avantages, les développeurs peuvent s'attaquer efficacement à toute une série de difficultés tout en maintenant la conformité et la transparence.

Questions Fréquemment Posées

Quelle est la meilleure façon d'importer des données Excel dans SQL Server en utilisant C#?

En utilisant la bibliothèque IronXL, vous pouvez importer efficacement des données Excel dans SQL Server en lisant le fichier Excel et en insérant les données dans la base de données sans avoir besoin de Microsoft Excel installé.

Comment puis-je lire des fichiers Excel en C# sans utiliser Microsoft Excel?

IronXL vous permet de lire des fichiers Excel en C# sans nécessiter Microsoft Excel. Vous pouvez charger le classeur Excel, accéder aux feuilles de travail et extraire des données en utilisant des méthodes simples.

Quelles sont les étapes pour connecter un fichier Excel à SQL Server dans une application C#?

Tout d'abord, utilisez IronXL pour lire le fichier Excel. Ensuite, établissez une connexion à SQL Server en utilisant la classe SqlConnection, et utilisez SqlCommand pour insérer des données dans la base de données SQL.

Pourquoi devrais-je utiliser IronXL pour les opérations Excel dans les applications .NET?

IronXL offre une gestion efficace des données, une compatibilité avec plusieurs plateformes .NET et ne nécessite pas d'installation d'Excel, ce qui le rend idéal pour les applications côté serveur et le traitement de grands ensembles de données.

Comment gérer de grands ensembles de données Excel en C#?

IronXL offre un support robuste pour les grands ensembles de données, vous permettant de lire et de manipuler efficacement les données dans les fichiers Excel et de les intégrer dans des applications sans problèmes de performance.

Quelles stratégies de gestion des erreurs devraient être utilisées lors de l'importation d'Excel vers SQL Server?

Implémentez des blocs try-catch pour gérer les erreurs potentielles telles que fichier introuvable, formats de données invalides ou exceptions SQL pour assurer un processus d'importation fluide.

Puis-je automatiser l'importation de données Excel dans SQL Server avec C# ?

Oui, en utilisant IronXL, vous pouvez automatiser le processus d'importation en écrivant une application C# qui lit des fichiers Excel et insère les données dans SQL Server avec un minimum d'intervention manuelle.

Comment les requêtes paramétrées empêchent-elles les injections SQL en C#?

Les requêtes paramétrées en C# vous permettent d'insérer en toute sécurité des données dans SQL Server en utilisant des espaces réservés pour les paramètres dans les commandes SQL, ce qui permet de prévenir les attaques par injection SQL.

Comment puis-je optimiser la performance de l'importation de données Excel vers SQL Server?

Optimisez la performance en utilisant des insertions par lots, en traitant efficacement de grands ensembles de données avec IronXL et en s'assurant que votre connexion et vos commandes SQL Server sont correctement configurées.

Quelles sont les options de licence pour utiliser IronXL dans un projet?

IronXL offre des options de licence flexibles adaptées aux besoins du projet, permettant aux développeurs de choisir le meilleur plan qui correspond à leurs exigences d'application et à leur budget.

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite