IRONSOFTWAREHOME
KORZYSTANIE Z IRONXL

Eksportuj dane SQL do Excel w C# z IronXL

Curtis Chau
Curtis Chau
Updated: 28 czerwca 2026

Eksportowanie danych z serwera SQL do programu Microsoft Excel jest częstym zadaniem dla programistów .NET tworzących systemy raportowania, narzędzia do analizy danych i aplikacje biznesowe. Ten samouczek pokazuje, jak eksportować dane SQL do Excela przy użyciu języka C# i biblioteki IronXL, biblioteki .NET do obsługi Excela, która obsługuje cały proces bez konieczności instalacji pakietu Microsoft Office.

Bezpłatna próba, aby śledzić poniższe przykłady kodu.

Pierwszy krok:
arrow pointer

Jak zainstalować IronXL do eksportu danych SQL?

Przed napisaniem jakiegokolwiek kodu należy dodać IronXL do projektu. Najszybszym sposobem jest skorzystanie z konsoli menedżera pakietów NuGet w programie Visual Studio:

PM > Install-Package IronXL.Excel

Alternatywnie można użyć interfejsu CLI platformy .NET:

dotnet add package IronXL.Excel

Po zainstalowaniu dodaj wymagane przestrzenie nazw na początku pliku. Dzięki instrukcjom najwyższego poziomu .NET 10 konfiguracja wygląda następująco:

using IronXL;
using System.Data;
using System.Data.SqlClient;

IronXL jest przeznaczony dla .NET Standard 2.0 i nowszych wersji, więc działa z projektami .NET 10, .NET Framework, ASP.NET Core i Blazor bez dodatkowej konfiguracji. Pakiet można znaleźć na NuGet.

Jaki jest najlepszy sposób na eksport danych z bazy danych SQL Server?

Najbardziej efektywne podejście do eksportu danych z SQL Server do pliku Excel obejmuje trzy kroki: ustal połączenie z bazą danych, przekaż dane do DataTable i zapisz dane w arkuszu Excel przy użyciu IronXL. W przeciwieństwie do rozwiązań Microsoft Interop, IronXL działa niezależnie i obsługuje duże zbiory danych bez spadków wydajności spowodowanych obciążeniem związanym z interoperacyjnością COM.

Podstawowy wzorzec jest prosty. SqlDataAdapter jest częścią ram architektury dostępu do danych ADO.NET Microsoft i stanowi standardowy sposób wypełniania obiektów DataTable z relacyjnych baz danych od wersji .NET 1.0:

  1. Otwórz SqlConnection z łańcuchem połączenia
  2. Użyj SqlDataAdapter, aby wypełnić DataTable lub DataSet
  3. Wywołaj metody IronXL, aby utworzyć skoroszyt i wypełnić komórki arkusza
  4. Zapisz skoroszyt jako .xlsx lub .xls

To podejście jest zgodne z SQL Server 2012 i nowszymi wersjami, a także z Azure SQL Database, Amazon RDS dla SQL Server oraz dowolnym źródłem danych zgodnym z ADO.NET. Ten sam schemat ma zastosowanie niezależnie od tego, czy pracujesz z aplikacją konsolową, czy internetowym narzędziem do raportowania.

Jak połączyć się z serwerem SQL i pobrać dane?

Zanim będzie można eksportować dane SQL, należy ustanowić połączenie i wykonać zapytanie SQL, aby wypełnić DataTable. Ciąg połączenia zawiera poświadczenia bazy danych SQL Server oraz informacje o serwerze wymagane do uzyskania dostępu do danych.

Poniższy przykład wysyła zapytanie do tabeli Nierthwind Customers i zapisuje każdy wiersz w arkuszu Excelu przy użyciu interfejsu API IronXL do zapisywania komórek:

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Data Source=localhost;Initial Catalog=Nierthwind;Integrated Security=True";
string sql = "SELECT * FROM Customers";

using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();

SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);
DataTable dt = new DataTable();
adapter.Fill(dt);

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Customers");

// Write column headers
for (int col = 0; col < dt.Columns.Count; col++)
{
    workSheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}

// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        workSheet.SetCellValue(row + 1, col, dt.Rows[row][col].ToString());
    }
}

workBook.SaveAs("CustomerExport.xlsx");

Wynik

Jak eksportować dane SQL do Excela w C# za pomocą IronXL: Obraz 1 - Wygenerowany plik Excel

Ten kod tworzy plik Excel z poprawnie sformatowanymi nagłówkami kolumn, pochodzącymi ze struktury tabeli serwera SQL. DataTable dt przechowuje wyniki zapytania, które następnie są zapisywane w każdej komórce systematycznie przy użyciu indeksów wierszy i kolumn opartych na zerze. IronXL obsługuje zarówno formaty .xls, jak i .xlsx dla szerokiej kompatybilności z aplikacjami Microsoft Office.

Jeśli tabela SQL zawiera kolumny DateTime lub numeryczne, odpowiednio rzutuj wartości komórek przed wywołaniem SetCellValue. Bezpośrednie przekazywanie typów numerycznych zachowuje typy danych programu Excel i umożliwia sortowanie oraz obliczenia formuł w wyeksportowanych kolumnach.

Jak używać LoadWorkSheetsFromDataSet do eksportowania wielu tabel?

Gdy raport wymaga danych z kilku tabel SQL -- na przykład Produkty i Kategorie -- można je załadować do DataSet, a IronXL automatycznie utworzy jeden arkusz na tabelę. Jest to najbardziej zwięzłe podejście do eksportowania zestawu danych (DataSet) lub tabeli danych (DataTable) do programu Excel.

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Data Source=.;Initial Catalog=Inventory;Integrated Security=True";

using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();

SqlDataAdapter productsAdapter = new SqlDataAdapter("SELECT * FROM Products", connection);
SqlDataAdapter categoriesAdapter = new SqlDataAdapter("SELECT * FROM Categories", connection);

DataSet dataSet = new DataSet();
productsAdapter.Fill(dataSet, "Products");
categoriesAdapter.Fill(dataSet, "Categories");

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);

workBook.SaveAs("InventoryReport.xlsx");

Wynik

Jak eksportować dane SQL do Excela w C# za pomocą IronXL: Obraz 4 - Wygenerowano plik z nagłówkami kolumn

LoadWorkSheetsFromDataSet odczytuje właściwość TableName każdego DataTable wewnątrz DataSet i tworzy odpowiadającą kartę arkusza. Nazwy kolumn z DataTable stają się nagłówkami w każdym arkuszu. Ta metoda jest szczególnie przydatna dla procedur składowanych, które zwracają wiele zestawów wyników, ponieważ można wypełnić DataSet za pomocą wielu wywołań SqlDataAdapter, a następnie wszystko wyeksportować jednym krokiem.

Dla aplikacji, które muszą tworzyć pliki Excel programowo z niestandardowym formatowaniem, można nadal uzyskać dostęp do poszczególnych arkuszy po wywołaniu LoadWorkSheetsFromDataSet i stosować style, szerokości kolumn lub formuły przed zapisaniem.

Jak można eksportować dane za pomocą przycisku eksportu w ASP.NET?

W przypadku aplikacji internetowych eksport zazwyczaj uruchamia się po kliknięciu przycisku przez użytkownika. Poniższy przykład ASP.NET Web Forms pokazuje, jak obsłużyć zdarzenie kliknięcia przycisku, zbudować skoroszyt Excel z zapytania SQL i wysłać plik do przeglądarki jako pobieranie za pomocą Response.AddHeader:

using IronXL;
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web.UI;

public partial class ExportPage : Page
{
    private void ExportButton_Click(object sender, EventArgs e)
    {
        string connectionString = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True";

        using SqlConnection connection = new SqlConnection(connectionString);
        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Orders", connection);
        DataSet dataSet = new DataSet();
        adapter.Fill(dataSet);

        WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);

        byte[] fileBytes = workBook.ToByteArray();
        string filename = "OrdersExport.xlsx";

        Response.Clear();
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        Response.AddHeader("content-disposition", "attachment;filename=" + filename);
        Response.BinaryWrite(fileBytes);
        Response.End();
    }
}

Przykładowy przycisk eksportu

Jak eksportować dane SQL do Excela w C# za pomocą IronXL: Obraz 2 - Przykład interfejsu przycisku eksportu

Wynik

Jak eksportować dane SQL do Excela w C# za pomocą IronXL: Obraz 3 - Wygenerowany plik

Metoda ToByteArray() konwertuje cały skoroszyt na tablicę bajtów w pamięci, którą następnie zapisujesz bezpośrednio do strumienia odpowiedzi HTTP. Pozwala to uniknąć zapisywania pliku tymczasowego na dysku. W przeciwieństwie do Microsoft Interop, który wymaga object misValue zastępczych i zainstalowanej licencji Office na serwerze, IronXL działa całkowicie w kodzie zarządzanym bez żadnych zewnętrznych zależności.

Dla projektów ASP.NET Core i Razor Pages, zastąp Response.BinaryWrite przez return File(fileBytes, contentType, filename) z akcji kontrolera. Wzorzec eksportu .NET Core do Excela opiera się na tym samym podejściu polegającym na przekształcaniu skoroszytu w tablicę bajtów.

Jak dodać formatowanie i nagłówki kolumn do eksportowanych plików Excel?

Surowe eksporty SQL często wymagają poprawek w zakresie prezentacji przed udostępnieniem ich użytkownikom końcowym. IronXL zapewnia kontrolę nad stylami komórek, szerokością kolumn i formatami liczb po zapisaniu danych w arkuszu. Poniższy przykład pokazuje, jak pogrubić wiersz nagłówka i automatycznie dopasować szerokość kolumn:

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True";

using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();

SqlDataAdapter adapter = new SqlDataAdapter("SELECT OrderID, CustomerID, OrderDate, Total FROM Orders", connection);
DataTable dt = new DataTable();
adapter.Fill(dt);

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Orders");

// Write and style header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    workSheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    workSheet[0, col].Style.Font.Bold = true;
    workSheet[0, col].Style.Font.Height = 12;
}

// Write data rows with type-aware value assignment
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        object value = dt.Rows[row][col];
        if (value is DateTime date)
            workSheet.SetCellValue(row + 1, col, date.ToString("yyyy-MM-dd"));
        else if (value is decimal || value is double || value is int)
            workSheet.SetCellValue(row + 1, col, Convert.ToDouble(value));
        else
            workSheet.SetCellValue(row + 1, col, value.ToString());
    }
}

workBook.SaveAs("FormattedOrdersExport.xlsx");

Stylizacja wiersza nagłówka pogrubioną czcionką i większym rozmiarem sprawia, że eksportowane raporty są łatwiejsze do odczytania w programie Excel. Dla kolumn liczbowych, takich jak sumy lub liczniki, przekaż wartość double zamiast łańcucha tekstowego, aby umożliwić prawidłowe działanie wbudowanych funkcji sortowania i agregacji Excela na wyeksportowanych danych.

Możesz eksplorować pełną gamę opcji formatowania - w tym obramowania komórek, kolory tła i maski formatu liczbowego - w dokumentacji formatowania komórek IronXL.

Jak efektywnie radzić sobie z dużymi zbiorami danych SQL?

W przypadku tabel zawierających dziesiątki tysięcy wierszy zarządzanie pamięcią staje się istotne. Załadowanie całego zestawu wyników do DataTable przed zapisaniem go do Excela działa dobrze dla większości raportów, ale dla bardzo dużych eksportów można przetwarzać wiersze w partiach lub użyć bezpośrednio SqlDataReader.

W przypadku pracy z eksportami o dużej objętości warto rozważyć następujące strategie:

  • Paginacja za pomocą SQL OFFSET/FETCH: Podziel duże eksporty na wiele arkuszy, z których każdy zawiera jedną stronę wyników. Dzięki temu rozmiary poszczególnych arkuszy w programie Excel pozostają łatwe do zarządzania.
  • Strumień na dysk: Wywołaj workBook.SaveAs(filePath) po każdej partii, zamiast przechowywać wszystko w pamięci za pomocą ToByteArray().
  • Ogranicz wybrane kolumny: Użyj jawnych list kolumn w poleceniu SELECT, zamiast SELECT *, aby zmniejszyć ilość danych przesyłanych z SQL Server.

Aby uzyskać wskazówki dotyczące najszybszego sposobu eksportowania tabeli danych (DataTable) do programu Excel w języku C#, na blogu IronXL znajduje się specjalny artykuł porównawczy, w którym zestawiono różne podejścia i ich profile pamięciowe.

Metoda WorkBook.LoadWorkSheetsFromDataSet jest szczególnie efektywna dla obiektów DataSet średniego rozmiaru, ponieważ obsługuje iterację wierszy wewnętrznie. W przypadku konkretnego scenariusza eksportu z DataTable do Excela metoda ta ogranicza ilość kodu szablonowego i jest zoptymalizowana pod kątem zapisów zbiorczych.

Jak zaimportować dane z powrotem z Excela do SQL Servera?

W przypadku wielu aplikacji do raportowania proces eksportu to tylko połowa sukcesu. Może być również konieczne umożliwienie użytkownikom pobrania szablonu, wypełnienia go danymi i ponownego przesłania do serwera SQL. IronXL sprawia, że ten dwukierunkowy przepływ pracy jest prosty.

Aby zaimportować dane Excel do bazy danych, załaduj przesłany plik za pomocą WorkBook.Load(filePath), iteruj po wierszach arkusza i wstaw każdy wiersz, używając sparametryzowanego SqlCommand.

using IronXL;
using System.Data.SqlClient;

WorkBook workBook = WorkBook.Load("UploadedData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

string connectionString = "Data Source=localhost;Initial Catalog=Inventory;Integrated Security=True";

using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();

// Skip header row, start at row index 1
for (int row = 1; row <= sheet.RowCount; row++)
{
    string productName = sheet[row, 0].StringValue;
    int quantity = (int)sheet[row, 1].DoubleValue;
    decimal price = (decimal)sheet[row, 2].DoubleValue;

    using SqlCommand cmd = new SqlCommand(
        "INSERT INTO Products (Name, Quantity, Price) VALUES (@name, @qty, @price)",
        connection);
    cmd.Parameters.AddWithValue("@name", productName);
    cmd.Parameters.AddWithValue("@qty", quantity);
    cmd.Parameters.AddWithValue("@price", price);
    cmd.ExecuteNienQuery();
}

Zapytania parametryzowane chronią przed atakami typu SQL injection podczas odczytu danych z plików Excel dostarczonych przez użytkownika. Dokumentacja SqlCommand w serwisie Microsoft Learn obejmuje wszystkie dostępne przeciążenia i wzorce wiązania parametrów. Zawsze sprawdzaj wartości komórek przed wstawieniem — szukaj pustych ciągów znaków, liczb poza zakresem oraz nieoczekiwanych typów danych, które mogą spowodować naruszenie ograniczeń w tabeli SQL Server.

Dla kierunku odwrotnego, IronXL obsługuje odczyt plików CSV w C# dla scenariuszy, w których twoje źródło danych generuje dane rozdzielane przecinkami zamiast plików .xlsx.

Jak wypada IronXL na tle innych rozwiązań do eksportu?

Istnieje kilka metod eksportowania danych SQL do programu Excel w środowisku .NET. Poniższa tabela podsumowuje kluczowe kompromisy:

Metody eksportu danych z SQL do Excela w środowisku .NET — porównanie funkcji
PodejścieWymagane biuroObsługa DataSetFormatowanieBezpieczny dla serwerów
IronXLNieTak (wbudowane)Pełne style, formułyTak
Microsoft InteropTakRęczna iteracjaPełna wersja dostępna za pośrednictwem COMNie (serwer COM)
EPPlusNieRęczna iteracjaObszerneTak
NPOINieRęczna iteracjaDobrzeTak
Wyjście CSVNiePodręcznikNieneTak

Microsoft Interop wymaga zainstalowania pakietu Office na serwerze i nie jest obsługiwany w aplikacjach internetowych po stronie serwera. IronXL, EPPlus, i NPOI działają bez Office. Zaletą IronXL jest jego pierwszorzędne wsparcie dla DataSet i DataTable przez LoadWorkSheetsFromDataSet, co zmniejsza kod eksportowy do kilku linii w porównaniu do ręcznej iteracji wierszy w innych bibliotekach.

Szczegółowe porównanie można znaleźć w artykułe poświęconym alternatywom dla Microsoft Office Interop.

Jakie są Twoje kolejne kroki?

Eksportowanie danych SQL do Excela przy użyciu języka C# staje się proste dzięki IronXL. Biblioteka eliminuje skomplikowane zależności Interop, zapewniając jednocześnie solidne wsparcie dla DataTable, DataSet i bezpośredniej integracji z bazą danych. Niezależnie od tego, czy tworzysz aplikacje konsolowe, czy internetowe systemy raportowania z możliwością pobierania plików, IronXL zapewnia niezawodne generowanie plików Excel we wszystkich typach projektów .NET 10.

Aby dalej rozwijać tę wiedzę, zapoznaj się z poniższymi zasobami:

Kup licencję na wdrożenie produkcyjne lub kontynuuj odkrywanie możliwości tej biblioteki Excel w swoich projektach .NET, korzystając z bezpłatnej wersji próbnej.

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ęczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta