IRONSOFTWAREHOME
IRONXL KULLANARAK

OleDb vs IronXL Kullanan C# ile DataTable Excel'e Nasıl Aktarılır

Curtis Chau
Curtis Chau
Updated: 28 Haziran 2026

Bir DataTable'ı C#'ta bir Excel dosyasına - herhangi bir Office bağımlılığı olmadan - dışa aktarmak, doğru kütüphane ile basittir. Önce WorkBook.Create() çağırırsınız, dataTable.Columns ile başlıkları yazarsınız, hücreleri doldurmak için dataTable.Rows döngüsüne girersiniz ve ardından workbook.SaveAs("output.xlsx") ile kaydedersiniz. Sonuç, .NET 10, Linux konteynerleri ve Azure sunucusuz işlevleri de dahil olmak üzere herhangi bir platformda çalışan tamamen biçimlendirilmiş bir XLSX dosyasıdır.

Bu kılavuz, eski OleDb yaklaşımını modern IronXL .NET için yöntemi ile karşılaştırır. Neden OleDb sürücüsünün dağıtım ve uyumluluk problemleri yarattığını ve neden bunu sütun başlıkları, veri türleri, hücre biçimlendirme ve SQL söz dizimi veya yalnızca Windows'a özgü sürücü kurulumları olmadan büyük veri setleriyle başa çıkabilen temiz, sürdürülebilir kodla kaldırmanız gerektiğini göreceksiniz.


DataTable Dışa Aktarım İçin IronXL Nasıl Kurulur?

Herhangi bir dışa aktarma kodu yazmadan önce IronXL'yi projenize ekleyin. Visual Studio'da Paket Yöneticisi Konsolunu açın ve şu komutu çalıştırın:

PM > Install-Package IronXL.Excel

IronXL, Microsoft Office, Access Veritabanı Motoru veya herhangi bir COM interop katmanına bağımlı değildir. Paket kurulduktan sonra, Windows, Linux, macOS, Docker, Azure ve AWS'de aynı kodu tek bir satırı değiştirmeden çalıştırabilirsiniz.

Neden OleDb Sürücü Kurulumu Gerektirir

Geleneksel OleDb yaklaşımı bir Excel dosyasını veritabanı olarak ele alır. OleDbConnection bir Microsoft.ACE.OLEDB.12.0 sağlayıcı kullanarak (veya .xls dosyaları için eski Microsoft.Jet.OLEDB.4.0 kullanarak) oluşturursunuz, ardından tabloya karşı SQL CREATE TABLE ve INSERT INTO komutları yürütürsünüz. Bu, Microsoft Office'in veya bağımsız Access Database Engine yeniden dağıtılabilir paketinin zaten yüklü olduğu geliştirici makinelerinde çalışır. Ancak, üretim ortamlarında - özellikle bulut işlevleri, Docker konteynerleri ve başsız .NET 10 çalışan sunucu çiftlikleri - bu sürücü nadiren mevcut ve kurulumu yükseltilmiş ayrıcalıklar gerektiriyor ve sürücü ile işlem arasında uyumlu bir bit derinliği gerektiriyor.

Geliştiriciler Neden Hala OleDb'yi Excel Dışa Aktarımı İçin Kullanıyor?

OleDb, .NET Framework'ün zaten parçası olduğu için Excel otomasyonu için varsayılan bir seçim haline geldi. Geliştiriciler zaten ADO.NET'i biliyorlardı, bu nedenle OleDbConnection, OleDbCommand ve OleDbDataAdapter'u Excel'e yazmak için yeniden kullanmak doğal geldi. Üçüncü taraf bir paket gerekmedi ve CREATE TABLE ve INSERT INTO için SQL benzeri sentaks, veritabanı programlamasıyla tanıdık olan herkese amacı açık hale getirdi.

İşte OleDb kullanarak bir DataTable'ı dışa aktarmak için geleneksel desen:

using System.Data;
using System.Data.OleDb;

// Build a sample DataTable
DataTable dataTable = new DataTable("Products");
dataTable.Columns.Add("ProductID", typeof(int));
dataTable.Columns.Add("ProductName", typeof(string));
dataTable.Columns.Add("Price", typeof(decimal));
dataTable.Rows.Add(1, "Widget", 29.99m);
dataTable.Rows.Add(2, "Gadget", 49.99m);
dataTable.Rows.Add(3, "Gizmo", 19.99m);

// OleDb connection string -- file must already exist on disk
string filename = @"C:\Output\Products.xlsx";
string connectionString =
    $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filename};" +
    "Extended Properties='Excel 12.0 Xml;HDR=YES'";

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

// Create the sheet structure with SQL DDL
string create = "CREATE TABLE [Sheet1$] (ProductID INT, ProductName CHAR(255), Price DOUBLE)";
using (var createCmd = new OleDbCommand(create, connection))
    createCmd.ExecuteNonQuery();

// Insert rows one at a time
string insert = "INSERT INTO [Sheet1$] (ProductID, ProductName, Price) VALUES (?, ?, ?)";
using OleDbCommand insertCmd = new(insert, connection);
insertCmd.Parameters.Add(new OleDbParameter("ProductID", OleDbType.Integer));
insertCmd.Parameters.Add(new OleDbParameter("ProductName", OleDbType.VarChar, 255));
insertCmd.Parameters.Add(new OleDbParameter("Price", OleDbType.Double));

foreach (DataRow row in dataTable.Rows)
{
    insertCmd.Parameters[0].Value = row["ProductID"];
    insertCmd.Parameters[1].Value = row["ProductName"];
    insertCmd.Parameters[2].Value = row["Price"];
    insertCmd.ExecuteNonQuery();
}

Bu kod, her DataRow'u ayrı bir veritabanı turu olarak ekler. Büyük veri setleri için bu döngü bir darboğaz haline gelir çünkü OleDb aracılığıyla mevcut bir toplu ekleme mekanizması yoktur. Her satır, bir sonraki satıra geçmeden önce tam bir SQL ayrıştırma, parametre bağlama ve yazma döngüsünü tetikler.

OleDb'nin Excel Dışa Aktarım İçin Ana Sınırlamaları Nelerdir?

Neden OleDb'nin yetersiz kaldığını anlamak, ekibinize göçü gerekçelendirmeye ve doğru değişimi seçmeye yardımcı olur.

Sürücü Bağımlılıkları ve Bit Uyumsuzlukları

Microsoft.ACE.OLEDB.12.0 sağlayıcı, uygulamanızın çalıştığı her makineye ayrı ayrı yüklenmelidir. İşleminiz 64-bit ise ancak yalnızca 32-bit Access Veritabanı Motoru mevcutsa, Microsoft Office 32-bit'in 64-bit .NET çalışma zamanı yanında kurulu olduğu yaygın bir yapılandırmada - bağlantı çalıştırma zamanında bir istisna atar. Microsoft bu bit sınırlamalarını belgeler ve sürücü ile çağıran işlem arasında eşleşen bir bit derinliği kullanılmasını önerir, ancak bu, paylaşılan barındırma veya konteynerize edilmiş ortamlarda genellikle pratik değildir.

Çapraz Platform Desteği Yok

OleDb, yalnızca Windows'a özgü bir teknolojidir. .NET 10, Linux ve macOS'u yerel olarak destekler ve modern mimariler, uygulama iş yüklerini giderek artan bir şekilde Linux düğümlerinde Docker konteynerlerinde çalıştırır. System.Data.OleDb ad alanı, Windows olmayan işletim sistemlerinde PlatformNotSupportedException attığı için, OleDb kullanan herhangi bir kod yolu bu platformlarda çalıştırılamaz.

Hücre Biçimlendirme Yeteneği Yok

OleDb, elektronik tabloyu düz bir veritabanı tablosu olarak ele alır. Ham değerleri ekleyebilirsiniz, ancak hücre yazı tiplerini, arka plan renklerini, kenarlıkları, sayı formatlarını veya sütun genişliklerini uygulamanız için hiçbir mekanizma yoktur. Eğer dışa aktarma, profesyonel görünümlü bir rapor, başlık satırı stili, para birimi formatlama veya koşullu renklendirme gerektiriyorsa, OleDb bunu sağlayamaz. Farklı bir kütüphane veya Excel Interop COM nesnesi ile ikinci bir geçişe ihtiyaç duyar, bu da kendi Office bağımlılığını ekler.

Excel Dosyasının Zaten Mevcut Olması Gerekiyor

OleDb, sıfırdan yeni bir Excel çalışma kitabı oluşturamaz. Bağlantıyı açmadan önce dosyanın hedef yolda zaten mevcut olması gerekir. Bu, önceden ekilmiş bir şablon dosyası veya başka bir kütüphane kullanarak çalışma kitabı oluşturma adımı gerektirir, bu da dağıtım paketine gereksiz bir karmaşıklık ekler.

DELETE İşlemleri Desteklenmiyor

Excel için OleDb sürücüsü INSERT ve sınırlı UPDATE işlemlerini destekler, ancak DELETE FROM kullanarak satır silme desteklenmez. Dışa aktarma sonrası satırların kaldırılmasını gerektiren herhangi bir veri manipülasyon iş akışı, dosyanın elle manipülasyonu veya tam dosya yeniden oluşturulması gibi manuel işlem gerektirir, bu da OleDb arayüzü üzerinden basit değildir.

IronXL İle Bir DataTable'ı Excel'e Nasıl Dışa Aktarabilirsiniz?

IronXL, tüm OleDb hattını doğrudan bir nesne modeli ile değiştirir. Bağlantı dizileri, SQL komutları ve sürücü gereksinimleri yoktur. Bir WorkBook oluşturursunuz, bir WorkSheet eklersiniz ve her hücre için SetCellValue() çağırırsınız:

using IronXL;
using System.Data;

// Build the same DataTable
DataTable dataTable = new DataTable("Products");
dataTable.Columns.Add("ProductID", typeof(int));
dataTable.Columns.Add("ProductName", typeof(string));
dataTable.Columns.Add("Price", typeof(decimal));
dataTable.Rows.Add(1, "Widget", 29.99m);
dataTable.Rows.Add(2, "Gadget", 49.99m);
dataTable.Rows.Add(3, "Gizmo", 19.99m);

// Create a new workbook and worksheet -- no template file needed
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Products");

// Write column headers into the first row
for (int col = 0; col < dataTable.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);
}

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

workbook.SaveAs("Products.xlsx");

WorkBook.Create(ExcelFileFormat.XLSX), bellekte yeni bir çalışma kitabı oluşturur -- öncesinde bir dosyanın var olması gerekmez. CreateWorkSheet("Products") adlı bir sekme ekler. İç içe döngüler, DataTable'ın satır ve sütun sayılarını tam olarak yansıtır, hücre başına bir değer yazar. SaveAs() çalışma kitabını geçerli bir XLSX dosyası olarak diske yazar.

Çıktı

OleDb vs IronXL Kullanarak DataTable'ı Excel C#'a Aktarma: Resim 1 - Excel Çıktısı

Mevcut seçeneklere daha derin bir bakış için, dataSet ve DataTable nasıl dışa aktarılır kılavuzu ek yüklemeleri ve toplu dışa aktarma kalıplarını kapsar.

DataTable Dışa Aktarırken Hücre Biçimlendirmesini Nasıl Ekleriz?

Temel bir dışa aktarımdan sonra en yaygın gereksinimlerden biri, başlık satırını veri satırlarından bulunduğu bir yerle ayırt eder. IronXL, OleDb'nin eşleştiremeyeceği tam bir stil API'si sunar:

using IronXL;
using IronXL.Styles;
using System.Data;

DataTable dataTable = new DataTable("Products");
dataTable.Columns.Add("ProductID", typeof(int));
dataTable.Columns.Add("ProductName", typeof(string));
dataTable.Columns.Add("Price", typeof(decimal));
dataTable.Rows.Add(1, "Widget", 29.99m);
dataTable.Rows.Add(2, "Gadget", 49.99m);
dataTable.Rows.Add(3, "Gizmo", 19.99m);

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Products");

// Write and style the header row
for (int col = 0; col < dataTable.Columns.Count; col++)
{
    var headerCell = worksheet[$"{(char)('A' + col)}1"];
    headerCell.Value = dataTable.Columns[col].ColumnName;
    headerCell.Style.Font.Bold = true;
    headerCell.Style.BackgroundColor = "#4472C4";
    headerCell.Style.Font.FontColor = "#FFFFFF";
}

// Write data rows with price column formatted as currency
for (int row = 0; row < dataTable.Rows.Count; row++)
{
    for (int col = 0; col < dataTable.Columns.Count; col++)
    {
        var cell = worksheet[$"{(char)('A' + col)}{row + 2}"];
        cell.Value = dataTable.Rows[row][col].ToString();

        // Apply currency format to the Price column
        if (dataTable.Columns[col].ColumnName == "Price")
            cell.FormatString = "$#,##0.00";
    }
}

// Auto-size columns so content is not clipped
worksheet.AutoSizeColumn(0);
worksheet.AutoSizeColumn(1);
worksheet.AutoSizeColumn(2);

workbook.SaveAs("ProductsStyled.xlsx");

Bu, mavi bir başlık satırı, beyaz başlık metni ve bir dolar işareti ile iki ondalık hane olarak görüntülenen fiyat değerleri içeren bir dosya üretir. hücre yazı tipi boyutu kılavuzu ve kenarlık ve hizalama referansı, mevcut tüm stil seçeneklerini açıklar.

Büyük DataTable Dışa Aktarımlarını Yönetme

Binlerce satırlık veri kümeleri için performans önemlidir. IronXL, bellek içindeki tüm hücre değerlerini SaveAs() tek bir disk yazmasıyla yazarken, bu OleDb deseninin satır başına bir ExecuteNonQuery() olmasıyla kıyaslandığında çok daha verimlidir. Çok büyük tabloları dışa aktarmanız gerekiyorsa, DataTable'ı Excel'e dışa aktarmanın en hızlı yolu kılavuzu, bellek açısından etkili akış tekniklerini kapsar.

Ayrıca, formüller, aralıklar ve adlandırılmış tablolarla dışa aktarma mantığını gruplandırabilirsiniz. elektronik tablo oluşturma nasıl yapılır ve .NET kılavuzunda Excel yazma, DataTable'dan çok sayfali çalışma kitapları oluşturmanın tam desenlerini sağlar.

ASP.NET'te Bir DataTable'ı Excel'e Nasıl Dışa Aktarırsınız?

Bir web uygulamasında, genellikle çalışma kitabını diske kaydetmek yerine doğrudan tarayıcıya akıtırsınız. IronXL, bunun için workbook.ToByteArray() kullanarak HTTP yanıtına yazabileceğiniz ikili içeriği döndürür:

// In an ASP.NET controller action
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Report");

// Assume dataTable is populated from your data source
for (int col = 0; col < dataTable.Columns.Count; col++)
    worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);

for (int row = 0; row < dataTable.Rows.Count; row++)
    for (int col = 0; col < dataTable.Columns.Count; col++)
        worksheet.SetCellValue(row + 1, col, dataTable.Rows[row][col].ToString());

byte[] fileBytes = workbook.ToByteArray();
return File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx");

ASP.NET DataTable'ı Excel'e dışa aktarma öğreticisi bir ASP.NET uygulaması için tam kontrolör ve görünüm bağlantılamayı adım adım açıklar. DataTable'dan Excel C# kılavuzu çok sayfalı dışa aktarımlar ve DataSet desteği de dahil olmak üzere ek senaryoları kapsar.

Bir Bakışta OleDb vs. IronXL Karşılaştırması

C#'ta DataTable'ı Excel'e dışa aktarma için OleDb ve IronXL özellik karşılaştırması
YetenekOleDbIronXL
Sürücü kurulumu gereklidirEvet (ACE.OLEDB veya Jet)Hayır
Çapraz platform (.NET 10 / Linux)HayırEvet
Sıfırdan yeni çalışma kitabı oluşturHayırEvet
Hücre biçimlendirme ve stil vermeHayırEvet
Formül desteğiHayırEvet
Toplu ekleme performansıSatır bazlı (yavaş)Bellekte (hızlı)
DELETE satır desteğiHayırEvet
Docker / konteyner desteğiHayırEvet

Data Sütun Türlerini İhraç Sırasında Nasıl Yönetirsiniz?

Bir DataTable sütunu sayısal veya tarihsel değerler tuttuğunda, onları dize olarak yazmak, Excel'in hücreyi metin olarak ele almasına neden olur, bu da sıralama, filtreleme ve formül referanslarını devre dışı bırakır. Değeri doğrudan geçirdiğinizde IronXL, yerel türleri .ToString() çağırmadan korur:

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("TypedData");

DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Amount", typeof(decimal));
table.Columns.Add("Date", typeof(DateTime));
table.Rows.Add(1, 1500.75m, new DateTime(2025, 6, 15));
table.Rows.Add(2, 3200.00m, new DateTime(2025, 7, 4));

// Write headers
for (int col = 0; col < table.Columns.Count; col++)
    worksheet.SetCellValue(0, col, table.Columns[col].ColumnName);

// Write typed values -- no .ToString() conversion
for (int row = 0; row < table.Rows.Count; row++)
{
    worksheet.SetCellValue(row + 1, 0, (int)table.Rows[row]["ID"]);
    worksheet.SetCellValue(row + 1, 1, (double)(decimal)table.Rows[row]["Amount"]);
    worksheet[$"C{row + 2}"].Value = (DateTime)table.Rows[row]["Date"];
    worksheet[$"C{row + 2}"].FormatString = "yyyy-MM-dd";
}

workbook.SaveAs("TypedData.xlsx");

Excel şimdi Miktar sütununu sayısal olarak sıralayabilir ve Tarih sütununu tarih seçicilerle filtreleyebilir. Ek veri formatı kalıpları için, hücre veri formatını ayarlama kılavuzuna bakın. Eğer dışa aktarma sonrasında verileri geri okumanız gerekiyorsa, Excel'den DataTable'a öğretici ters işlemi kapsar.

Mevcut OleDb İhracat Kodunu Taşımak

OleDb'den IronXL'a geçiş yapmak genellikle tek bir sprint'ten daha az zaman alır. Yapısal değişiklikler şunlardır:

  1. Tüm using System.Data.OleDb referanslarını ve ACE sürücü sarmalayıcı paketi için NuGet referanslarını kaldırın.
  2. OleDbConnection başlatma bloğunu WorkBook.Create(ExcelFileFormat.XLSX) ile değiştirin.
  3. CREATE TABLE komutunu workbook.CreateWorkSheet("SheetName") ile değiştirin.
  4. INSERT INTO döngüsünü, her hücre için birer SetCellValue() çağrısı ile iç içe değiştirin.
  5. connection.Close()'i workbook.SaveAs("output.xlsx") ile değiştirin.

Üstelik, Excel 2007 veya sonrasına henüz yükseltilmemiş olan alıcılar için eski format dosyaları üretmek adına .xls uzantısı ile workbook.SaveAs() da çağırabilirsiniz. Elektronik tablo dosya türlerini dönüştürme kılavuzu, desteklenen tüm çıktı formatlarını listeler.

IronXL Nasıl Test Edilir ve Lisanslanır?

IronXL, deneme lisansı ile geliştirme sırasında ücretsiz kullanılabilir. Anahtarı ilk IronXL çağrısından önce kodda uygularsınız:

IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

Lisans anahtarı uygulama kılavuzu, yapılandırma dosyaları ve ortamsal değişkenler dahil olmak üzere tüm yerleşim seçeneklerini açıklar. Bulut dağıtımları için, Docker ve Linux başlama sayfaları, platforma özgü kurulum adımlarını kapsar.

Microsoft, OleDb senaryoları için Access Veritabanı Motorunun bilinen kısıtlamalarını belgelendirmiştir ve NuGet.org, IronXL paketini tam sürüm geçmişi ve indirme istatistikleri ile barındırır. Resmi Açık XML SDK belgeleri, IronXL'ın uyguladığı temel XLSX spesifikasyonunu açıklar.

Sonraki Adımlarınız Neler?

Artık bir DataTable'yi OleDb sürücüleri olmadan, SQL söz dizimi olmadan ve platform sınırlamaları olmadan bir XLSX dosyasına aktarmak için bir çalışma modeline sahipsiniz. Temel iş akışı -- bir döngüde WorkBook.Create(), CreateWorkSheet(), SetCellValue(), ardından SaveAs() -- üç satırlık bir örnekten yüz binlerce satırlık veri kümelerine kadar genişler.

Mevcut OleDb ihracatınızı yukarıda gösterilen temel IronXL modelini kullanarak başlatın ve ardından veri ihracatının doğrulandığını gözlemleyerek stil API'sini kullanarak biçimlendirme uygulayın. Başlangıç kılavuzu ve özellikler özetini anlamak için iyi okuyuculardır. Eğer aynı boru hattının bir parçası olarak CSV dosyalarıyla çalışıyorsanız, C# DataTable'dan CSV'ye kılavuzu, aynı DataTable nesnesinden virgülle ayrılmış çıkış üretmenin nasıl yapılacağını gösterir.

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ılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez