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#.

How to Import Excel to SQL Server in C
- Skonfiguruj swoje środowisko deweloperskie
- Przygotuj swój plik Excel
- Połącz się z bazą danych SQL Server
- Odczytaj dane z plików Excel za pomocą IronXL
- Eksportuj dane i generuj raport PDF za pomocą IronPDF
- 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ą:
- Otwórz Visual Studio: Upewnij się, że zainstalowałeś Visual Studio na swoim komputerze przed jego otwarciem.
- Rozpocznij nowy projekt: Wybierz
File->New->Project.

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

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

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

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ć.

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
Łą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
Łą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
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.

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.

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
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.




