IronXL ile C# İçinde Excel'e SQL Verisi Dışa Aktarma
SQL Server'dan Microsoft Excel'e veri ihracı, raporlama sistemleri, veri analiz araçları ve iş uygulamaları oluşturan .NET geliştiriciler için yaygın bir görevdir. Bu öğretici, Microsoft Office yüklemesi gerektirmeden, tüm süreci idare eden bir .NET Excel kütüphanesi olan IronXL kullanarak SQL verilerini Excel'e nasıl aktaracağınızı gösterir.
Kodu uygulamak için ücretsiz deneme sürümünüzü başlatın.
SQL Veri Aktarımı için IronXL Nasıl Kurulur?
Herhangi bir kod yazmadan önce, projenize IronXL eklemeniz gerekir. En hızlı yol, Visual Studio'da NuGet Paket Yöneticisi Konsolu aracılığıyla yapılır:
Install-Package IronXl.Excel
Install-Package IronXl.Excel
Alternatif olarak, .NET CLI'yi kullanın:
dotnet add package IronXl.Excel
dotnet add package IronXl.Excel
Kurulumdan sonra, dosyanızın üst kısmına gerekli ad alanlarını ekleyin. .NET 10 üst düzey deyimleriyle kurulumunuz şöyle 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 10, .NET Framework, ASP.NET Core ve Blazor projeleriyle ek yapılandırma gerektirmeden çalışması için .NET Standard 2.0 ve üstünü hedefler. Paketi NuGet üzerinde bulabilirsiniz.
SQL Server Veritabanından Veri Çıkarmanın En İyi Yolu Nedir?
SQL Server'dan Excel dosyasına veri aktarmanın en verimli yöntemi üç adımdan oluşur: veritabanı bağlantısı kurmak, verileri 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 ek yüklerinden kaynaklanan performans darboğazları olmadan büyük veri kümelerini işler.
Ana desen basittir. SqlDataAdapter, Microsoft'un ADO.NET veri erişim çerçevesi'nin parçasıdır ve .NET 1.0'dan beri ilişkisel veritabanlarından DataTable nesnelerini doldurmanın standart yolu olmuştur:
- Bağlantı dizesi ile bir
SqlConnectionaçın - Bir
DataTableveyaDataSetdoldurmak içinSqlDataAdapterkullanın - Bir defter oluşturmak ve çalışma sayfası hücrelerini doldurmak için IronXL yöntemlerini çağırın
- Çalışma kitabını
.xlsxveya.xlsolarak kaydedin
Bu yaklaşım SQL Server 2012 ve sonrası, Azure SQL Database, Amazon RDS for SQL Server ve herhangi bir ADO.NET uyumlu veri kaynağı ile uyumludur. Aynı desen, konsol uygulamaları veya web tabanlı raporlama araçlarıyla çalışırken de geçerlidir.
SQL Server'a Nasıl Bağlanır ve Veri Nasıl Alırsınız?
SQL verilerini aktarmadan önce, bir bağlantı kurmanız ve bir SQL sorgusu çalıştırarak bir DataTable doldurmanız gerekir. Bağlantı dizesi, verilerinize erişmek için gerekli SQL Server veritabanı kimlik bilgilerini ve sunucu bilgilerini içerir.
Aşağıdaki örnek, Hayırrthwind Müşteriler 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 tablosu yapınızdan türetilmiş düzgün biçimlendirilmiş sütun başlıkları ile bir Excel dosyası oluşturur. DataTable dt, sistematik olarak sıfır tabanlı satır ve sütun dizinleri kullanılarak her hücreye yazılan sorgu sonuçlarını depolar. IronXL, Microsoft Office uygulamaları ile geniş uyumluluk sağlamak için hem .xls hem de .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 tür dönüşümü yapın. Sayısal tipleri doğrudan geçirmek, Excel veri tiplerini korur ve dışa aktarılmış sütunlar üzerinde sıralama ve formül hesaplamalarına olanak tanır.
LoadWorkSheetsFromDataSet Kullanarak Birden Çok Tablo Nasıl Aktarılır?
Raporunuzun birden fazla SQL tablosundan veri ihtiyaç duyduğunda - örneğin, Ürünler ve Kategoriler - bunları bir DataSet içine yükleyebilir ve IronXL'in her tablo için otomatik olarak bir çalışma sayfası oluşturmasına izin verebilirsiniz. Bu, bir DataSet veya DataTable'u Excel'e aktarmanın en özlü yoludur.
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 DataTable'nin TableName özelliğini okur ve eşleşen bir çalışma sayfası sekmesi oluşturur. DataTable'den gelen sütun adları, her sayfadaki başlık satırına dönüşür. Bu yöntem, birden fazla sonuç kümesi döndüren saklı yordamlar için özellikle faydalıdır çünkü DataSet'yi birden fazla SqlDataAdapter çağrıları kullanarak doldurabilir ve ardından her şeyi tek adımda dışa aktarabilirsiniz.
Özel biçimlendirme ile programatik olarak Excel dosyaları oluşturması gereken uygulamalar için, LoadWorkSheetsFromDataSet çağrıldıktan sonra bireysel çalışma sayfalarına erişebilir ve kaydetmeden önce stiller, sütun genişlikleri veya formüller uygulayabilirsiniz.
Bir ASP.NET Dışa Aktarma Düğmesi Kullanarak Veri Nasıl Aktarılır?
Web uygulamalarında, genellikle bir kullanıcı bir düğmeye tıkladığında dışa aktarma işlemi başlatılır. Aşağıdaki ASP.NET Web Forms örneği, buton tıklama olayını nasıl işleyeceğinizi, bir SQL sorgusundan Excel çalışma kitabını nasıl oluşturacağınızı ve dosyayı Response.AddHeader kullanarak bir indirme olarak tarayıcıya nasıl göndereceğinizi 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, ardından bunu HTTP yanıt akışına doğrudan yazarsınız. Bu, diske geçici bir dosya yazmaktan kaçınır. Sunucuda object misValue yer tutucuları ve bir Office lisansı gerektiren Microsoft Interop'un aksine, IronXL tamamen yönetilen koda dayalı olarak çalışır ve dış bağımlılıklar içermez.
ASP.NET Core ve Razor Pages projeleri için, denetleyici eyleminizden Response.BinaryWrite yerine return File(fileBytes, contentType, filename) kullanın. ASP.NET Core dışa aktarma Excel'e deseni, aynı defterden bayt dizisine yaklaşımı takip eder.
Dışa Aktarılan Excel Dosyalarına Biçimlendirme ve Sütun Başlıkları Nasıl Eklersiniz?
Ham SQL dışa aktarımları genellikle son kullanıcılarla paylaşılmadan önce sunum iyileştirmeleri gerektirir. IronXL, veriler çalışma sayfasına yazıldıktan sonra hücre stilleri, sütun genişlikleri ve sayı formatları üzerinde kontrol sağlar. Aşağıdaki örnek, başlık satırını kalınlaştırmayı ve sütun genişliklerini otomatik olarak sığdırmayı 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ı tipi ile biçimlendirmek, dışa aktarılan raporların Excel'de okunmasını kolaylaştırır. Toplamlar veya sayımlar gibi sayı sütunları için, bir dizgi yerine bir double değeri geçmek, dışa aktarılan verilerde Excel'in yerel sıralama ve toplama işlevlerinin doğru çalışmasını sağlar.
IronXL hücre biçimlendirme belgelerinde hücre kenarlıkları, arka plan renkleri ve sayı format maskeleri dahil, tüm biçimlendirme seçeneklerini keşfedebilirsiniz.
Büyük SQL Veri Kümeleri Etkili Şekilde Nasıl Ele Alınır?
On binlerce satırdan oluşan tablolar için bellek yönetimi önemli hale gelir. Çoğu rapor için, verilerin Excel'e yazılmadan önce tüm sonuç kümesini bir DataTable'ye yüklemek iyi çalışır, ancak çok büyük aktarımlar için satırları toplu olarak işleyebilir veya doğrudan SqlDataReader kullanabilirsiniz.
Yüksek hacimli dışa aktarımlarla çalışırken şu stratejileri dikkate alın:
- SQL OFFSET/FETCH ile sayfala: Büyük dışa aktarımları birden çok çalışma sayfasına ayırın, her birinde bir sayfa sonuç içeren. Bu, Excel'de bireysel sayfa boyutlarını yönetilebilir tutar.
- Diske aktarım yapın: Her toplu işlemden sonra
workBook.SaveAs(filePath)çağrısını yapın,ToByteArray()ile her şeyi bellekte tutmak yerine. - Seçili sütunları sınırlayın: SQL Server'dan aktarılan veri miktarını azaltmak için
SELECT *yerineSELECTifadesinde açık sütun listeleri kullanın.
C#'da DataTable'u Excel'e aktarmanın en hızlı yolu hakkında rehberlik için, IronXL blogu farklı yaklaşımları ve bellek profillerini karşılaştıran özel bir benchmark makalesine sahiptir.
WorkBook.LoadWorkSheetsFromDataSet metodu, satır döngüsünü dahili olarak işlediği için, orta boyuttaki DataSet nesneleri için özellikle verimlidir. Özellikle DataTable'dan Excel'e senaryosu için bu yöntem, kalıp kodunu azaltır ve toplu yazımlar için optimize edilmiştir.
Excel'den SQL Server'a Veri Nasıl Geri Aktarılır?
Birçok raporlama uygulaması için aktarım iş akışı hikayenin sadece yarısıdır. Kullanıcıların bir şablonu indirip verileri doldurmasını ve SQL Server'a geri yüklemesine izin vermeniz de gerekebilir. IronXL, bu çift yönlü iş akışını kolaylaştırır.
Bir veritabanı içine Excel verilerini ithal etmek için, yüklenen dosyayı WorkBook.Load(filePath) ile yükleyin, çalışma sayfası satırları üzerinden geçin ve her satırı parametrelendirilmiş 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.ExecuteHayırnQuery();
}
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.ExecuteHayırnQuery();
}
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ının sağladığı Excel verilerini okurken SQL enjeksiyonuna karşı koruma sağlar. SqlCommand belgesi Microsoft Learn, tüm mevcut aşırı yükleme ve parametre bağlama desenlerini kapsar. Her zaman hücre değerlerini eklemeden önce doğrulayın -- boş dizeler, aralık dışı sayılar ve SQL Server tablonuzda kısıtlama ihlallerine neden olabilecek beklenmeyen veri türlerini kontrol edin.
Ters yönde, veri kaynağınız .xlsx dosyaları yerine virgülle ayrılmış çıktı ürettiği senaryolar için IronXL'e destek vermektedir C#'da CSV dosyalarını okumak.
IronXL'i Diğer Dışa Aktarma Yaklaşımlarıyla Nasıl Karşılaştırırsınız?
.NET'te SQL verilerini Excel'e aktarmak için birkaç yaklaşım vardır. Aşağıdaki tablo, ana ticaret-off'ları özetler:
| Yaklaşım | Ofis Gerekli | DataSet Desteği | Biçimlendirme | Sunucu Güvenliği |
|---|---|---|---|---|
| IronXL | Hayır | Evet (yerleşik) | Tam stiller, formüller | Evet |
| Microsoft Interop | Evet | El ile yineleme | KOM üzerinden tam | Hayır (KOM sunucusu) |
| EPPlus | Hayır | El ile yineleme | Kapsamlı | Evet |
| NPOI | Hayır | El ile yineleme | İyi | Evet |
| CSV çıktısı | Hayır | Manuel | Hayırne | Evet |
Microsoft Interop, sunucuda Office yüklü olmasını gerektirir ve sunucu taraflı web uygulamalarında desteklenmez. IronXL, EPPlus ve NPOI tümü Office olmadan çalışır. IronXL'in avantajı, LoadWorkSheetsFromDataSet yoluyla birinci sınıf DataSet ve DataTable desteğidir, bu da diğer kütüphanelerdeki manuel satır döngüsü yerine dışa aktarma kodunu birkaç satıra indirir.
Ayrıntılı bir başa başa karşılaştırma için, Microsoft Office Interop alternatifleri makalesine bakın.
Sıradaki Adımlarınız Neler?
C# kullanarak SQL verilerini Excel'e aktarmak IronXL ile basit hale gelir. Kütüphane, karmaşık Interop bağımlılıklarını ortadan kaldırırken, güçlü DataTable, DataSet ve doğrudan veritabanı entegrasyonu desteği sağlar. Dosya indirme yeteneğine sahip konsol uygulamaları veya web tabanlı raporlama sistemleri oluştururken, IronXL tüm .NET 10 proje türlerinde güvenilir Excel dosya oluşturma sağlar.
Bu temelin üzerine inşa etmeye devam etmek için aşağıdaki ilgili kaynakları keşfedin:
- C#'da Excel Dosyası Oluşturun -- defter oluşturma ve biçimlendirme üzerine tam öğretici
LoadWorkSheetsFromDataSetmetodu için resmi DataSet ve DataTable Excel'e Aktarma kılavuzu- Excel'den SQL'e Veri Aktarın -- tamamlanmış gidiş-dönüş iş akışı
- DataTable'dan Excel'e Dışa Aktarma -- tek tablo senaryoları için odaklanmış kılavuz
- ASP.NET DataTable'ı Excel'e Aktarın -- web uygulaması dışa aktarma desenleri
- DataTable'ı Excel'e Aktarmanın En Hızlı Yolu -- performans ölçütleri
Bir lisans satın alın ve üretime geçin veya bu Excel kütüphanesinin tüm yeteneklerini .NET projelerinizde test etmek için bir ücretsiz deneme ile keşfetmeye devam edin.
Sıkça Sorulan Sorular
SQL verilerini C# kullanarak Excel'e nasıl dışa aktarabilirim?
IronXL ile C# kullanarak SQL verilerini Excel'e dışa aktarabilirsiniz. SqlConnection ve SqlDataAdapter kullanarak SQL Server'a bağlanın, bir DataTable doldurun ve ardından IronXL ile bir çalışma kitabı oluşturun ve veri satırlarını yazın. IronXL, Microsoft Office yüklemesini gerektirmez.
SQL verilerini dışa aktarmak için IronXL kullanmanın önkoşulları nelerdir?
SQL verilerini dışa aktarmak için IronXL kullanmak üzere bir .NET projesine (Framework, Core veya .NET 10+), SQL Server veritabanı erişimine ve NuGet paketi Install-Package IronXl.Excel ile kurulu IronXL'e sahip olmanız gerekir.
IronXL ile SQL verilerini Excel'e dışa aktarmak için Microsoft Office yüklü olmasına gerek var mı?
Hayır, IronXL ile sisteminizde veya sunucunuzda Microsoft Office yüklü olmasına gerek kalmadan SQL verilerini Excel'e dışa aktarabilirsiniz.
IronXL, SQL verilerini Excel'e dışa aktarırken büyük veri kümelerini işleyebilir 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 sayfalandırın, diske SaveAs ile yazın ve SQL sorgusunda seçili sütunları sınırlayın.
Birden fazla SQL tablosunu ayrı Excel sayfalarına nasıl aktarırım?
Çoklu SqlDataAdapter çağrıları ile doldurulmuş bir DataSet ile WorkBook.LoadWorkSheetsFromDataSet kullanın. IronXL her DataTable için bir çalışma sayfası oluşturur ve her sekmeyi DataTable.TableName özelliğinden isimlendirir.
ASP.NET'te bir Excel dosyası indirmesini nasıl tetiklerim?
Dosyayı bayt olarak almak için workBook.ToByteArray()'i çağırın ve ardından doğru Content-Type ve content-disposition başlıkları ile HTTP yanıtına yazın. ASP.NET Core'da, dosya baytlarını, contentType ve dosya adını kontrolcünüzden geri döndürün.
IronXL ile Excel verilerini SQL Server'a geri aktarabilir miyim?
Evet. WorkBook.Load ile Excel dosyasını yükleyin, IronXL'in indeksleyici özelliğini kullanarak çalışma sayfası satırları üzerinde yineleme yapın ve her satırı SQL enjeksiyonuna karşı koruma sağlamak için parametreli bir SqlCommand kullanarak ekleyin.
IronXL, SQL veri ihracı için Microsoft Interop ile nasıl karşılaştırılır?
IronXL, sunucuda Office yüklemesi gerektirmez, yönetilen kodda çalışır ve LoadWorkSheetsFromDataSet ile DataSet dışa aktarma desteğine sahiptir. Microsoft Interop bir COM sunucu gerektirir ve web sunucu ortamlarında güvenilir şekilde çalışamaz.




