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.
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
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:
- Bağlantı diziğinizle bir
SqlConnectionaçın - Bir
DataTableveyaDataSetdoldurmak içinSqlDataAdapterkullanın - Bir çalışma kitabı oluşturmak ve çalışma sayfası hücrelerini doldurmak için IronXL metodlarını çağırın
- Çalışma kitabını
.xlsxveya.xlsolarak 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
Çıktı

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
Çıktı

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
Örnek Dışa Aktarma Düğmesi

Çıktı

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
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 yerineToByteArray()ile. - Seçilen sütunları sınırlayın:
Marshal.ReleaseComObjectyerineSELECTifadesinde 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
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:
| 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:
- C#'te Excel Dosyası Oluşturma -- Çalışma kitabı oluşturma ve biçimlendirme üzerine tam öğretici
- DataSet ve DataTable'ın Excel'e Dışa Aktarılması --
LoadWorkSheetsFromDataSetmethodu için resmi uygulama kılavuzu - Excel'den Veri İçe Aktarma SQL -- Tam anlamıyla iş akışı
- DataTable'dan Excel'e Dışa Aktarım -- Tek tablo senaryolarına odaklanmış rehber
- ASP.NET DataTable'ı Excel'e Dışa Aktarma -- Web uygulaması dışa aktarma desenleri
- DataTable'dan Excel'e Dışa Aktarma için En Hızlı Yol -- Performans karşılaştırmaları
Ü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.




