Altbilgi içeriğine atla
IRONXL KULLANARAK

IronXL ile C# İçinde Excel'e SQL Verisi Dışa Aktarma

SQL Server'dan Microsoft Excel'e veri dışa aktarmak, raporlama sistemleri, veri analiz araçları ve iş uygulamaları oluştururken .NET geliştiricileri için yaygın bir görevdir. Bu eğitim, SQL verilerini Excel'e, Microsoft Office kurulumu gerektirmeyen bir .NET Excel kütüphanesi olan IronXL kullanarak C# ile nasıl dışa aktaracağınızı gösterir.

Ücretsiz denemenizi başlatın ve aşağıdaki kod örnekleriyle birlikte uygulayın.

Şimdi IronXL ile başlayın.
green arrow pointer

SQL Veri Dışa Aktarımı için IronXL Nasıl Kurulur?

Herhangi bir kod yazmadan önce, projenize IronXL'i eklemeniz gerekmektedir. En hızlı yol, Visual Studio'daki NuGet Paket Yöneticisi Konsolu üzerinden işlemektir:

Install-Package IronXL.Excel

Alternatif olarak, .NET CLI'yi kullanın:

dotnet add package IronXL.Excel

.NET 10 üst seviye ifadeleri ile kurulumu, dosyanızın üst kısmına gerekli ad alanlarını ekledikten sonra şu şekilde görünür:

using IronXL;
using System.Data;
using System.Data.SqlClient;
using IronXL;
using System.Data;
using System.Data.SqlClient;
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient
$vbLabelText   $csharpLabel

IronXL, .NET Standard 2.0 ve üstünü hedeflediği için, .NET 10, .NET Framework, ASP.NET Core ve Blazor projeleri ile ekstra bir yapılandırma gerektirmeden çalışır. Paketi NuGet üzerinden bulabilirsiniz.

SQL Server Veritabanından Veri Dışa Aktarmanın En İyi Yolu Nedir?

SQL Server'dan bir Excel dosyasına veri aktarmanın en etkili yolu üç adımdan oluşur: bir veritabanı bağlantısı kurmak, verileri bir DataTable içine almak ve IronXL kullanarak verileri bir Excel çalışma sayfasına yazmak. Microsoft Interop çözümlerinin aksine, IronXL bağımsız çalışır ve COM interop yükünden kaynaklanan performans darboğazları olmaksızın büyük veri kümelerini işler.

Temel desen basittir. SqlDataAdapter, Microsoft'un ADO.NET veri erişim çerçevesinin bir parçasıdır ve relational veritabanlarından DataTable nesnelerini doldurmanın standard yolu olmuştur, .NET 1.0'dan bu yana:

  1. Bağlantı diziğinizle bir SqlConnection açın
  2. Bir DataTable veya DataSet doldurmak için SqlDataAdapter kullanın
  3. Bir çalışma kitabı oluşturmak ve çalışma sayfası hücrelerini doldurmak için IronXL metodlarını çağırın
  4. Çalışma kitabını .xlsx veya .xls olarak kaydedin

Bu yaklaşım, SQL Server 2012 ve sonrası sürümler, Azure SQL Veritabanı, Amazon RDS for SQL Server ve ADO.NET uyumlu herhangi bir veri kaynağı ile uyumludur. Aynı desen, bir konsol uygulaması veya web tabanlı bir raporlama aracı ile çalışılırken de geçerlidir.

SQL Server'a Nasıl Bağlanır ve Veri Alırsınız?

SQL verilerini dışa aktarmadan önce, bir bağlantı kurmanız ve bir DataTable doldurmak için bir SQL sorgusu çalıştırmanız gerekir. Bağlantı dizesi, verilerinize erişim sağlamak için gerekli olan SQL Server veritabanı kimlik bilgilerini ve sunucu bilgilerini içerir.

Aşağıdaki örnek, Hayırrthwind Customers tablosunu sorgular ve her satırı IronXL'in hücre yazma API'si kullanarak bir Excel çalışma sayfasına yazar:

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

string connectionString = "Data Source=localhost;Initial Catalog=Hayırrthwind;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");
using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Data Source=localhost;Initial Catalog=Hayırrthwind;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");
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient

Dim connectionString As String = "Data Source=localhost;Initial Catalog=Hayırrthwind;Integrated Security=True"
Dim sql As String = "SELECT * FROM Customers"

Using connection As New SqlConnection(connectionString)
    connection.Open()

    Dim adapter As New SqlDataAdapter(sql, connection)
    Dim dt As New DataTable()
    adapter.Fill(dt)

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

    ' Write column headers
    For col As Integer = 0 To dt.Columns.Count - 1
        workSheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
    Next

    ' Write data rows
    For row As Integer = 0 To dt.Rows.Count - 1
        For col As Integer = 0 To dt.Columns.Count - 1
            workSheet.SetCellValue(row + 1, col, dt.Rows(row)(col).ToString())
        Next
    Next

    workBook.SaveAs("CustomerExport.xlsx")
End Using
$vbLabelText   $csharpLabel

Çıktı

IronXL ile SQL Verilerini Excel'e Aktarma: Görüntü 1 - Oluşturulan Excel dosyası

Bu kod, SQL Server tablo yapınızdan türetilmiş uygun biçimli sütun başlıkları ile bir Excel dosyası oluşturur. DataTable dt, sorgu sonuçlarını depolar ve daha sonra sıfır tabanlı sıra ve sütun indeksleri kullanılarak sistematik olarak her hücreye yazılır. IronXL, Microsoft Office uygulamaları ile geniş uyumluluk sağlamak için .xls ve .xlsx formatlarını destekler.

SQL tablonuz DateTime veya sayısal sütunlar içeriyorsa, SetCellValue çağrılmadan önce hücre değerlerini uygun şekilde dönüştürün. Sayısal türleri doğrudan geçirmek, Excel veri türlerini korur ve dışa aktarılan sütunlarda sıralama ve formül hesaplamalarını etkinleştirir.

Birden Fazla Tabloyu Dışa Aktarmak için LoadWorkSheetsFromDataSet Nasıl Kullanılır?

Raporunuzun, örneğin Ürünler ve Kategoriler gibi, birkaç SQL tablosundan veri alması gerektiğinde, verileri bir DataSet içine yükleyip IronXL'nin her tablo için otomatik olarak bir çalışma sayfası oluşturmasına izin verin. Bu, bir DataSet veya DataTable'ı Excel'e dışa aktarmanın en özlü yaklaşımıdır.

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");
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");
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient

Dim connectionString As String = "Data Source=.;Initial Catalog=Inventory;Integrated Security=True"

Using connection As New SqlConnection(connectionString)
    connection.Open()

    Dim productsAdapter As New SqlDataAdapter("SELECT * FROM Products", connection)
    Dim categoriesAdapter As New SqlDataAdapter("SELECT * FROM Categories", connection)

    Dim dataSet As New DataSet()
    productsAdapter.Fill(dataSet, "Products")
    categoriesAdapter.Fill(dataSet, "Categories")

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

    workBook.SaveAs("InventoryReport.xlsx")
End Using
$vbLabelText   $csharpLabel

Çıktı

IronXL ile SQL Verilerini Excel'e Aktarma: Image 4 - Sütun başlıkları içeren oluşturulan dosya

LoadWorkSheetsFromDataSet, DataSet içindeki her bir DataTable nesnesinin TableName özelliğini okur ve eşleşen bir çalışma sayfası sekmesi oluşturur. DataTable 'dan gelen sütun adları her sayfanın başlık satırı olur. Bu yöntem, birden fazla sonuç kümesi döndüren saklı yordamlar için özellikle kullanışlıdır, çünkü DataSet kümesini birden fazla SqlDataAdapter çağrısı kullanarak doldurabilir ve ardından her şeyi tek bir adımda dışa aktarabilirsiniz.

Özel biçimlendirme ile Excel dosyaları oluşturması gereken uygulamalar için, LoadWorkSheetsFromDataSet çağrısını yaptıktan sonra hala her bir çalışma sayfasına erişebilir ve kaydetmeden önce stiller, sütun genişlikleri veya formüller uygulayabilirsiniz.

Bir ASP.NET Dışa Aktarma Düğmesi Kullanarak Verileri Nasıl Dışa Aktarırsınız?

Web uygulamaları için, genellikle bir kullanıcı bir düğmeye tıkladığında dışa aktarma tetiklenir. Aşağıdaki ASP.NET Web Forms örneği, buton tıklama olayını nasıl işleyip bir SQL sorgusundan Excel çalışma kitabı oluşturup dosyayı Response.AddHeader kullanarak tarayıcıya indirme olarak gönderileceğini gösterir:

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();
    }
}
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();
    }
}
Imports IronXL
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports System.Web.UI

Public Partial Class ExportPage
    Inherits Page

    Private Sub ExportButton_Click(sender As Object, e As EventArgs)
        Dim connectionString As String = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True"

        Using connection As New SqlConnection(connectionString)
            Dim adapter As New SqlDataAdapter("SELECT * FROM Orders", connection)
            Dim dataSet As New DataSet()
            adapter.Fill(dataSet)

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

            Dim fileBytes As Byte() = workBook.ToByteArray()
            Dim filename As String = "OrdersExport.xlsx"

            Response.Clear()
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
            Response.AddHeader("content-disposition", "attachment;filename=" & filename)
            Response.BinaryWrite(fileBytes)
            Response.End()
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Örnek Dışa Aktarma Düğmesi

IronXL ile SQL Verilerini Excel'e Aktarma: Görüntü 2 - Örnek dışa aktarma düğmesi ui

Çıktı

IronXL ile SQL Verilerini Excel'e Aktarma: Image 3 - Oluşturulan dosya

ToByteArray() metodu, tüm çalışma kitabını bellek içi bir bayt dizisine dönüştürür, ki bu daha sonra doğrudan HTTP yanıt akışına yazılır. Bu, diske geçici bir dosya yazmayı önler. Sunucuda object misValue yer tutucular ve yüklenmiş bir Office lisansı gerektiren Microsoft Interop'un aksine, IronXL tamamen yönetilen kod üzerine çalışır ve hiçbir dış bağımlılığı yoktur.

ASP.NET Core ve Razor Pages projeleri için, denetleyici eyleminizden Response.BinaryWrite yerine return File(fileBytes, contentType, filename) kullanın. ASP.NET Core'un Excel'e dışa aktarım deseni aynı çalışma kitabı-byte dizisi yaklaşımını takip eder.

Dışa Aktarılan Excel Dosyalarına Biçimlendirme ve Sütun Başlıklarını Nasıl Ekleyebilirsiniz?

Hammade SQL dışavurumları, son kullanıcılara paylaşmadan önce sıklıkla sunum iyileştirmelerine ihtiyaç duyar. IronXL, veri çalışma sayfasına yazıldıktan sonra hücre stilleri, sütun genişlikleri ve sayı formatları üzerinde kontrol sunar. Aşağıdaki örnek, başlık satırını kalın yapmayı ve sütun genişliklerini otomatik olarak ayarlamayı gösterir:

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");
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");
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient

Dim connectionString As String = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True"

Using connection As New SqlConnection(connectionString)
    connection.Open()

    Dim adapter As New SqlDataAdapter("SELECT OrderID, CustomerID, OrderDate, Total FROM Orders", connection)
    Dim dt As New DataTable()
    adapter.Fill(dt)

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

    ' Write and style header row
    For col As Integer = 0 To dt.Columns.Count - 1
        workSheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
        workSheet(0, col).Style.Font.Bold = True
        workSheet(0, col).Style.Font.Height = 12
    Next

    ' Write data rows with type-aware value assignment
    For row As Integer = 0 To dt.Rows.Count - 1
        For col As Integer = 0 To dt.Columns.Count - 1
            Dim value As Object = dt.Rows(row)(col)
            If TypeOf value Is DateTime Then
                Dim dateValue As DateTime = CType(value, DateTime)
                workSheet.SetCellValue(row + 1, col, dateValue.ToString("yyyy-MM-dd"))
            ElseIf TypeOf value Is Decimal OrElse TypeOf value Is Double OrElse TypeOf value Is Integer Then
                workSheet.SetCellValue(row + 1, col, Convert.ToDouble(value))
            Else
                workSheet.SetCellValue(row + 1, col, value.ToString())
            End If
        Next
    Next

    workBook.SaveAs("FormattedOrdersExport.xlsx")
End Using
$vbLabelText   $csharpLabel

Başlık satırını kalın metin ve daha büyük bir yazı tipiyle stilize etmek, Excel'de dışa aktarılan raporların okunmasını kolaylaştırır. Toplamlar veya sayımlar gibi sayı sütunları için, bir dize yerine bir double değeri geçirmek, Excel'in yerel sıralama ve toplama işlevlerinin dışa aktarılan veriler üzerinde doğru şekilde çalışmasını sağlar.

IronXL hücre biçimlendirme belgelerinde -- hücre kenarlıkları, arka plan renkleri ve sayı format maskeleri de dahil olmak üzere -- biçimlendirme seçeneklerinin tam kapsamını keşfedebilirsiniz.

Büyük SQL Veri Kümesini Verimli bir Şekilde Nasıl Ele Alırsınız?

On binlerce satır içeren tablolar için bellek yönetimi önemli hale gelir. Excel'e yazmadan önce tüm sonuç kümesinin bir DataTable içine yüklenmesi çoğu rapor için iyi çalışır, ancak çok büyük dışa aktarımlar için satırları gruplar halinde işleyebilir veya doğrudan SqlDataReader kullanabilirsiniz.

Yüksek hacimli dışa aktarımlar ile çalışırken, aşağıdaki stratejileri göz önünde bulundurun:

  • SQL OFFSET/FETCH ile sayfalama: Büyük dışa aktarımları, her biri bir sonuç sayfası içeren birden fazla çalışma sayfasına bölün. Bu, tek tek sayfa boyutlarını Excel'de yönetilebilir tutar.
  • Diske akış: Her bir grup sonrası çağrıyı workBook.SaveAs(filePath) olarak yapın, her şeyi bellekte tutmak yerine ToByteArray() ile.
  • Seçilen sütunları sınırlayın: Marshal.ReleaseComObject yerine SELECT ifadesinde açıkça sütun listeleri kullanın, SQL Server'dan aktarılan veri miktarını azaltmak için.

C#'ta bir DataTable'ı Excel'e dışa aktarmanın en hızlı yolu hakkındaki detaylar için IronXL blogunda farklı yaklaşımların ve bellek profillerinin karşılaştırıldığı bir kıyaslama makalesi vardır.

WorkBook.LoadWorkSheetsFromDataSet metodu, orta boyutlu DataSet objeleri için özellikle verimlidir, çünkü satır yineleme işlemini içsel olarak kullanır. DataTable'dan Excel'e dışa aktarma senaryosu için, bu yöntem kalıp kodu azaltır ve toplu yazma işlemleri için optimize edilmiştir.

Verileri Tekrar Excel'den SQL Server'a Nasıl İçe Aktarabilirsiniz?

Birçok raporlama uygulaması için dışa aktarma iş akışı sadece hikayenin yarısıdır. Kullanıcıların bir şablon indirip içine veri doldurmasına ve ardından SQL Server'a tekrar yüklemesine izin vermeniz gerekebilir. IronXL, bu iki yönlü iş akışını kolaylaştırır.

Bir veritabanına Excel verilerini aktarmak için, yüklenen dosyayı WorkBook.Load(filePath) ile yükleyin, çalışma sayfası satırları arasında yineleme yapın ve her satırı parametreli bir SqlCommand kullanarak ekleyin:

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.ExecuteNonQuery();
}
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.ExecuteNonQuery();
}
Imports IronXL
Imports System.Data.SqlClient

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

Dim connectionString As String = "Data Source=localhost;Initial Catalog=Inventory;Integrated Security=True"

Using connection As New SqlConnection(connectionString)
    connection.Open()

    ' Skip header row, start at row index 1
    For row As Integer = 1 To sheet.RowCount
        Dim productName As String = sheet(row, 0).StringValue
        Dim quantity As Integer = CInt(sheet(row, 1).DoubleValue)
        Dim price As Decimal = CDec(sheet(row, 2).DoubleValue)

        Using cmd As 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.ExecuteNonQuery()
        End Using
    Next
End Using
$vbLabelText   $csharpLabel

Parametreli sorgular, kullanıcı tarafından sağlanan Excel verilerini okurken SQL enjeksiyonlarına karşı koruma sağlar. SqlCommand belgelerinde Microsoft Learn'de tüm mevcut aşırı yüklemeler ve parametre bağlama düzenleri yer almaktadır. Her zaman hücre değerlerini eklemeden önce doğrulayın - boş dizeler, aralık dışı numaralar ve SQL Server tablolarınızda kısıtlama ihlalleri oluşturabilecek beklenmedik veri türleri olup olmadığını kontrol edin.

Ters yönde, verilerinizin virgülle ayrılmış çıktılar ürettiği senaryolar için IronXL ayrıca C# içinde CSV dosyalarını okuma desteği de sağlar.

IronXL'i Diğer Dışa Aktarım Yaklaşımları ile Nasıl Karşılaştırırsınız?

.NET'te SQL verilerini Excel'e dışa aktarmak için birkaç yaklaşım bulunmaktadır. Aşağıdaki tablo, başlıca karşılaştırmalı özellikleri özetlemektedir:

.NET'te SQL-Excel Dışa Aktarım Yaklaşımları -- Özellik Karşılaştırması
Yaklaşım Ofis Gerekli DataSet Desteği Biçimlendirme Sunucu-Güvenli
IronXL Hayır Evet (dahili) Tam stiller, formüller Evet
Microsoft Interop Evet Manuel yineleme Tam COM ile Hayır (COM sunucusu)
EPPlus Hayır Manuel yineleme Kapsamlı Evet
NPOI Hayır Manuel yineleme İyi Evet
CSV çıktısı Hayır Elle Hayırne Evet

Microsoft Interop, sunucuya Office yüklenmesini gerektirir ve sunucu tarafı web uygulamalarında desteklenmez. IronXL, EPPlus ve NPOI, Office olmadan çalışır. IronXL'nin avantajı ise DataSet ve DataTable desteği, LoadWorkSheetsFromDataSet üzerinden birinci sınıfıdır ve dışa aktarma kodunu manuel satır iterasyonlarına kıyasla birkaç satıra indirir.

Daha ayrıntılı bir baştan başa karşılaştırma için, Microsoft Office Interop alternatifleri makalesine bakınız.

Sonraki Adımlarınız Neler?

C# kullanarak SQL verilerini Excel'e dışa aktarmak IronXL ile doğrudan hale gelir. Kütüphane, karmaşık Interop bağımlılıklarını ortadan kaldırırken DataTable, DataSet ve doğrudan veritabanı entegrasyonu için güçlü destek sağlar. Konsol uygulamaları geliştiriyor ol veya dosya indirme yeteneklerine sahip web tabanlı raporlama sistemleri kuruyorsanız, IronXL, tüm .NET 10 proje türlerinde güvenilir bir Excel dosya oluşturma işlevselliği sunar.

Bu temeli inşa etmeye devam etmek için, ilgili kaynakları inceleyin:

Üretim dağıtımı için lisans satın alın veya bu Excel kütüphanesinin tüm yeteneklerini .NET projelerinizde test etmek için ücretsiz denemeye devam edin.

Sıkça Sorulan Sorular

C# kullanarak SQL verilerini Excel'e nasıl aktarabilirim?

C# ile IronXL kullanarak SQL verilerini Excel'e aktarabilirsiniz. SqlConnection ve SqlDataAdapter kullanarak SQL Server'a bağlanın, bir DataTable doldurun ve ardından IronXL kullanarak bir çalışma kitabı oluşturup veri satırlarını yazın. IronXL, Microsoft Office kurulumu gerektirmez.

SQL verilerini dışa aktarmak için IronXL kullanmanın ön koşulları nelerdir?

SQL verilerini dışa aktarmak için IronXL kullanmak amacıyla bir .NET projesi (Framework, Core veya .NET 10+), SQL Server veritabanına erişim ve Install-Package IronXL.Excel ile yüklenen IronXL NuGet paketi gereklidir.

IronXL ile Excel'e SQL verilerini dışa aktarmak için Microsoft Office kurulmalı mı?

Hayır, IronXL, sistem veya sunucunuzda Microsoft Office yüklemeye gerek kalmadan da SQL verilerini Excel'e aktarmanızı sağlar.

IronXL, Excel'e SQL verilerini dışa aktarırken büyük veri kümeleriyle başa çıkabilir mi?

Evet, IronXL, büyük veri kümelerini verimli bir şekilde işler. Çok büyük dışa aktarmalar için SQL OFFSET/FETCH ile sayfalama yapın, ToByteArray yerine SaveAs kullanarak diske yazın ve SQL sorgunuzda seçili sütunları sınırlandırın.

Birden çok SQL tablosunu ayrı Excel sayfalarına nasıl aktarırım?

Birden çok SqlDataAdapter çağrısıyla doldurulan bir DataSet ile WorkBook.LoadWorkSheetsFromDataSet kullanın. IronXL, her DataTable için bir çalışma sayfası oluşturur ve her sekmeyi DataTable.TableName özelliğine göre adlandırır.

ASP.NET'te Excel dosyası indirmeyi nasıl tetiklerim?

Dosyayı baytlara dönüştürmek için workBook.ToByteArray() çağırın, ardından HTTP yanıtına doğru Content-Type ve content-disposition başlıklarıyla yazın. ASP.NET Core'da denetleyicinizden File(fileBytes, contentType, filename) döndürün.

Excel verilerini SQL Server'a geri IronXL ile aktarabilir miyim?

Evet. Excel dosyasını WorkBook.Load ile yükleyin, IronXL'in indeksleyicisi ile çalışma sayfası satırları üzerinde yineleme yapın ve her satırı SQL enjeksiyonundan korunmak için parametreli bir SqlCommand kullanarak ekleyin.

IronXL, SQL verilerini dışa aktarmada Microsoft Interop ile karşılaştırıldığında nasıldır?

IronXL, sunucuda Office yüklü olmasını gerektirmeden çalışır, yönetilen kodda çalışır ve LoadWorkSheetsFromDataSet ile DataSet dışa aktarımını doğal olarak destekler. Microsoft Interop, bir COM sunucusu gerektirir ve web sunucusu ortamlarında güvenilir bir şekilde çalışamaz.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara