Przejdź do treści stopki
KORZYSTANIE Z IRONXL

Jak zaimportować plik Excel do serwera SQL w języku C#

W wielu różnych kontekstach biznesowych importowanie danych z Excela do SQL Server jest typową koniecznością. Czytanie danych z pliku Excela i wprowadzanie ich do bazy danych SQL Server to zadania związane z tą czynnością. Chociaż często używa się kreatora eksportu, IronXL dostarcza bardziej programistycznego i elastycznego podejścia do obsługi danych. IronXL to potężna biblioteka C#, która może importować dane z Excela z plików; dlatego jest możliwe przyspieszenie tej operacji. W tym celu, ten post dostarczy szczegółowego przewodnika jak skonfigurować, wykonać i zoptymalizować import Excela do SQL Server za pomocą C#.

Jak zaimportować Excela do SQL Server w C#: Rysunek 1 - IronXL: Biblioteka C# Excel

How to Import Excel to SQL Server in C

  1. Skonfiguruj swoje środowisko deweloperskie
  2. Przygotuj swój plik Excel
  3. Połącz się z bazą danych SQL Server
  4. Odczytaj dane z plików Excel za pomocą IronXL
  5. Eksportuj dane i generuj raport PDF za pomocą IronPDF
  6. Przeglądaj raport PDF

Czym jest IronXL?

IronXL, czasami określana jako IronXL.Excel, to bogata w funkcje biblioteka C# stworzona w celu ułatwienia pracy z plikami Excel w aplikacjach .NET. To wydajne narzędzie jest idealne do aplikacji po stronie serwera, ponieważ umożliwia deweloperom czytanie, tworzenie i edycję plików Excela bez potrzeby instalowania Microsoft Excel na komputerze. IronXL obsługuje formaty Excela od 2007 i późniejsze (.xlsx) oraz Excela 97–2003 (.xls), zapewniając wszechstronność w zarządzaniu różnymi wersjami plików Excel. Umożliwia znaczącą manipulację danymi, jak manipulacja arkuszami kalkulacyjnymi, wierszami i kolumnami, oprócz inserowania, aktualizowania i usuwania danych.

IronXL wspiera również formatowanie komórek i formuły z Excela, co pozwala na zaprogramowane generowanie skomplikowanych i dobrze sformatowanych arkuszy kalkulacyjnych. Dzięki optymalizacji wydajności i zgodności z wieloma platformami .NET, w tym .NET Framework, .NET Core i .NET 5/6, IronXL gwarantuje efektywne zarządzanie dużymi zbiorami danych. Jest to elastyczna opcja dla deweloperów chcących zintegrować operacje na plikach Excel ze swoimi aplikacjami, czy to do prostych działań import/eksport danych, czy skomplikowanych systemów raportowania, dzięki płynnemu interfejsowi z innymi frameworkami .NET.

Najważniejsze cechy

Czytaj i zapisuj pliki Excel

Deweloperzy mogą odczytywać i zapisywać dane do i z plików Excel za pomocą IronXL. Łatwo jest stworzyć nowe pliki Excel i edytować te już istniejące.

Nie wymaga instalacji Microsoft Excel

W przeciwieństwie do niektórych innych bibliotek, IronXL nie wymaga instalacji Microsoft Excel na komputerze, który hostuje aplikację. Ze względu na to, jest idealna do aplikacji serwerowych.

Wsparcie dla różnych formatów Excela

Biblioteka oferuje wszechstronność w zarządzaniu różnymi typami plików Excela poprzez wsparcie formatu .xls (Excel 97-2003) i .xlsx (Excel 2007 i późniejsze).

Utwórz nowy projekt Visual Studio

Projekt konsolowy Visual Studio jest prosty do stworzenia. W Visual Studio wykonaj następujące czynności, aby stworzyć Aplikację Konsolową:

  1. Otwórz Visual Studio: Upewnij się, że zainstalowałeś Visual Studio na swoim komputerze przed jego otwarciem.
  2. Rozpocznij nowy projekt: Wybierz File -> New -> Project.

Jak zaimportować Excela do SQL Server w C#: Rysunek 2 - Kliknij Nowy

  1. Z lewego panelu okna Create a new project wybierz preferowany język programowania, na przykład C#.
  2. Wybierz szablon Console App lub Console App (.NET Core) z listy dostępnych szablonów projektów.
  3. W polu Nazwa nadaj swojemu projektowi nazwę.

Jak zaimportować Excela do SQL Server w C#: Rysunek 3 - Podaj nazwę i lokalizację zapisu

  1. Zdecyduj o lokalizacji zapisu projektu.
  2. Kliknij Utwórz aby uruchomić projekt aplikacji konsolowej.

Jak zaimportować Excela do SQL Server w C#: Rysunek 4 - Na koniec kliknij utwórz, aby uruchomić aplikację

Instalacja biblioteki IronXL

Instalacja biblioteki IronXL jest wymagana z powodu nadchodzącej aktualizacji. Na koniec, aby zakończyć procedurę, uruchom konsolę Zarządzania Pakietami NuGet i wpisz następujące polecenie:

Install-Package IronXL.Excel

Jak zaimportować Excela do SQL Server w C#: Rysunek 5 - Wprowadź powyższą komendę w konsoli Menedżera pakietów NuGet, aby zainstalować IronXL

Inną metodą jest użycie Menedżera pakietów NuGet do wyszukania pakietu IronXL. To pozwala na wybranie, które z pakietów NuGet powiązanych z IronXL pobrać.

Jak zaimportować Excela do SQL Server w C#: Rysunek 6 - Alternatywnie wyszukaj IronXL za pomocą Menedżera pakietów NuGet i zainstaluj go

Importuj Excel do SQL za pomocą IronXL

Czytanie danych z Excela za pomocą IronXL

Proces czytania danych z plików Excel jest ułatwiony za pomocą IronXL. Poniższy przykład pokazuje, jak używać IronXL do odczytu danych z pliku Excel. Przy tym podejściu dane są czytane i zapisywane w liście słowników, z których każdy odpowiada jednemu wierszowi w arkuszu 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

Łączenie się z SQL Server

Użyj klasy SqlConnection z przestrzeni nazw System.Data.SqlClient, aby ustanowić połączenie z SQL Server. Upewnij się, że masz właściwy łańcuch połączeń, który zazwyczaj składa się z nazwy bazy danych, nazwy serwera i informacji o uwierzytelnieniu. Jak połączyć się z bazą danych SQL Server i dodać dane jest omówione w poniższym przykładzie.

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

Łączenie IronXL z SQL Server

Gdy logika do odczytu plików Excel oraz umieszczania danych w bazie SQL została ustalona, zintegrowanie tych funkcji do zakończenia procesu importu. Poniższa aplikacja odbiera informacje z pliku Excel i dodaje je do bazy danych 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

Ta klasa odpowiada za użycie IronXL do odczytywania danych z podanego pliku Excel. Funkcja ReadExcelFile ładuje skoroszyt Excel, otwiera pierwszy arkusz i zbiera dane, przechodząc przez wiersze arkusza danych. Aby ułatwić obsługę tabel, informacje są przechowywane w liście słowników.

Jak zaimportować Excela do SQL Server w C#: Rysunek 7 - Przykładowy plik wejściowy Excel

Dane są wstawiane do wyznaczonej tabeli bazy przez tę klasę, która również zarządza połączeniem z bazą danych SQL Server. Metoda InsertData używa zapytań parametryzowanych, aby zapobiec wstrzykiwaniu SQL, i dynamicznie buduje zapytanie SQL INSERT na podstawie kluczy słownika, które reprezentują nazwy kolumn.

Używając klasy ExcelReader do wczytywania danych do tabeli SQL z pliku Excel oraz klasy SqlServerConnector do wstawiania każdego wiersza do tabeli SQL Server, funkcja Main zarządza całym procesem.

Jak zaimportować Excela do SQL Server w C#: Rysunek 8 - Wynik pokazujący pomyślne zapytanie w SQL Server

Obsługa błędów i optymalizacja są kluczowe dla zapewnienia solidnego i wydajnego procesu importu. Wdrożenie solidnej obsługi błędów potrafi zarządzać potencjalnymi problemami, jak brakujące pliki, nieprawidłowe formaty danych i wyjątki SQL. Oto przykład włączenia obsługi błędów.

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

Wnioski

Wreszcie, skuteczną i niezawodną metodą zarządzania plikami Excel w aplikacjach .NET jest import danych z Excela do bazy danych MS SQL za pomocą C# i IronXL. IronXL jest kompatybilne z wieloma formatami Excela i posiada silne możliwości ułatwiające czytanie i zapisywanie danych Excel bez potrzeby instalacji Microsoft Excel. Dzięki integracji System.Data.SqlClient z IronXL, deweloperzy mogą łatwo przenosić dane między serwerami SQL, używając zapytań parametryzowanych do poprawy bezpieczeństwa i zapobiegania wstrzykiwaniu SQL.

Na koniec, dodanie IronXL i Iron Software do swojego zestawu narzędzi do rozwoju .NET pozwala na efektywne manipulowanie Excelem, tworzenie PDFów, przeprowadzanie OCR oraz używanie kodów kreskowych. Łącząc elastyczną Suite Iron Software z prostotą użytkowania, interoperacyjnością i wydajnością IronXL, gwarantuje się usprawnienie rozwoju i poprawę zdolności aplikacji. Dzięki jasnym opcjom licencji, które są dostosowane do wymagań projektu, deweloperzy mogą wybrać właściwy model z pewnością. Korzystając z tych korzyści, deweloperzy mogą skutecznie stawić czoła szeregu trudności, zachowując zgodność i przejrzystość.

Często Zadawane Pytania

Jaki jest najlepszy sposób na importowanie danych z Excela do SQL Servera przy użyciu języka C#?

Korzystając z biblioteki IronXL, można efektywnie importować dane z Excela do SQL Servera poprzez odczytanie pliku Excel i wstawienie danych do bazy danych bez konieczności instalowania programu Microsoft Excel.

Jak mogę odczytywać pliki Excel w języku C# bez użycia programu Microsoft Excel?

IronXL pozwala na odczyt plików Excel w języku C# bez konieczności korzystania z programu Microsoft Excel. Można załadować skoroszyt Excel, uzyskać dostęp do arkuszy i wyodrębnić dane przy użyciu prostych metod.

Jakie kroki należy wykonać, aby połączyć plik Excel z serwerem SQL Server w aplikacji napisanej w języku C#?

Najpierw użyj IronXL do odczytania pliku Excel. Następnie nawiąż połączenie z serwerem SQL Server za pomocą klasy SqlConnection i użyj SqlCommand do wstawienia danych do bazy danych SQL.

Dlaczego warto używać IronXL for .NET do operacji w programie Excel w aplikacjach .NET?

IronXL oferuje wydajną obsługę danych, kompatybilność z wieloma platformami .NET i nie wymaga instalacji programu Excel, co czyni go idealnym rozwiązaniem dla aplikacji po stronie serwera oraz do obsługi dużych zbiorów danych.

Jak radzić sobie z dużymi zbiorami danych Excel w języku C#?

IronXL zapewnia solidną obsługę dużych zbiorów danych, umożliwiając wydajne odczytywanie i przetwarzanie danych w plikach Excel oraz integrowanie ich z aplikacjami bez utraty wydajności.

Jakie strategie obsługi błędów należy stosować podczas importowania plików Excel do serwera SQL?

Wprowadź bloki try-catch, aby obsłużyć potencjalne błędy, takie jak brak pliku, nieprawidłowe formaty danych lub wyjątki SQL, aby zapewnić płynny proces importu.

Czy mogę zautomatyzować import danych z Excela do SQL Server w aplikacji napisanej w C#?

Tak, korzystając z IronXL, można zautomatyzować proces importu, pisząc aplikację w języku C#, która odczytuje pliki Excel i wstawia dane do serwera SQL przy minimalnej interwencji ręcznej.

W jaki sposób zapytania parametryczne zapobiegają atakom typu SQL injection w języku C#?

Zapytania parametryczne w języku C# pozwalają na bezpieczne wstawianie danych do serwera SQL Server poprzez użycie symboli zastępczych dla parametrów w poleceniach SQL, co pomaga zapobiegać atakom typu SQL injection.

Jak mogę zoptymalizować wydajność importowania danych z Excela do SQL Server?

Zoptymalizuj wydajność, korzystając z wstawiania zbiorczego, efektywnie przetwarzając duże zbiory danych za pomocą IronXL oraz upewniając się, że połączenie z SQL Serverem i polecenia są poprawnie skonfigurowane.

Jakie są opcje licencyjne dotyczące wykorzystania IronXL w projekcie?

IronXL oferuje elastyczne opcje licencyjne dostosowane do potrzeb projektu, umożliwiając programistom wybór planu najlepiej odpowiadającego wymaganiom aplikacji i budżetowi.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie