C#'ta SSRS'den IronPDF'ye Nasıl Geçilir
SQL Server Reporting Services (SSRS)'den IronPDF'ye geçiş yapmak, PDF oluşturma iş akışınızı ağır sunucu tabanlı bir altyapıdan, herhangi bir .NET uygulamasına doğrudan gömülebilen hafif, yerinde bir kütüphaneye dönüştürür. Bu kılavuz, SQL Server bağımlılıklarını, rapor sunucu yükünü ve Microsoft ekosistemi bağımlılığını ortadan kaldıran eksiksiz, adım adım bir geçiş yolu sağlar.
Neden SSRS'den IronPDF'ye Geçmeli
SSRS'yi Anlamak
SQL Server Reporting Services (SSRS), Microsoft'un SQL Server ekosistemi ile sıkı bir şekilde entegre olan kurumsal raporlama platformudur — raporlar oluşturmak, dağıtmak ve yönetmek için tam bir takımdır. Microsoft, SSRS 2022'nin son bağımsız sürüm olduğunu doğruladı: SQL Server 2025'ten itibaren, şirket içi raporlamalar Power BI Report Server (PBIRS) olarak birleştirilir ve yeni SSRS sürümleri gönderilmeyecek. SSRS 2022, 11 Ocak 2033 tarihine kadar SQL Server 2022 yaşam döngüsüne uygun olarak güvenlik güncellemeleri alacak (bkz. Raporlama Hizmetleri Konsolidasyon SSS).
Birçok PDF oluşturma senaryosu için, SSRS altyapısı fazladır. Geçiş yapılmak için temel nedenler şunlardır:
- SSRS çizgisin sonu: SQL Server 2025, SSRS olmadan gönderilecek; PBIRS yerine geçer. SSRS'yi hedef alan yeni çalışma bir çıkmaz yoldur.
- Ağır Altyapı: SQL Server, Rapor Sunucusu ve (eski Web Forms görüntüleyicisi için) IIS yapılandırması gerektirir
- Microsoft Ekosistemi Kapanı: SQL Server lisanslamasına ve Windows Server'a bağlı
- Karmaşık Dağıtım: Rapor dağıtımı, güvenlik yapılandırması ve abonelik yönetimi
- Pahalı Lisanslama: Özellikle kurumsal özellikler için SQL Server lisansları
- Birinci Sınıf .NET Core Desteği Yok: Microsoft'un
Microsoft.ReportingServices.ReportViewerControl.WebForms/.Winformspaketleri yalnızca .NET Framework 4.0–4.8.1 için hedeflenmiştir. .NET Core / .NET 5+ kullanıcıları topluluk portuReportViewerCore.NETCore'e dayanır. - Bakım Yükü: Sunucu yamaları, veritabanı bakımı, rapor yönetimi
- Bulut Yerel Seçeneği Yok: Yerel için tasarlanmış, bulut desteği zorludur
SSRS Gereksiz Olduğunda
| İhtiyacınız | SSRS Aşırı Yük |
|---|---|
| Fatura oluşturma | Tam rapor sunucusu |
| Veri tablolarını dışa aktarma | SQL Server lisansı |
| Verilerden PDF oluşturma | Windows Server |
| Basit belge oluşturma | Rapor abonelikleri |
IronPDF, herhangi bir sunucu altyapısı gerektirmeyen bir süreç içinde PDF oluşturma sağlar.
SSRS ve IronPDF Karşılaştırması
| Özellik | SSRS | IronPDF |
|---|---|---|
| Bağımlılık | SQL Server gerektirir | Belirli bir veritabanı bağımlılığı yok |
| Dağıtım | Sunucu tabanlı | Uygulamalara gömülü kütüphane |
| Entegrasyon | Microsoft ile sıkı entegrasyon | Herhangi bir veri kaynağı ile çalışır |
| Veri Görselleştirme | Geniş kapsamlı yerel seçenekler | PDF odaklı görselleştirmeler |
| Karmaşıklık | Yüksek (sunucu kurulumu gerektirir) | Orta ila düşük (kütüphane kurulumu) |
| Maliyet | SQL Server lisanslama maliyetleri | Geliştirici başına lisans maliyeti |
| HTML'den PDF'ye | Hayır | Tam Chromium |
| URL'den PDF'ye | Hayır | Evet |
| CSS Desteği | Sınırlı | Tam CSS3 |
| JavaScript | Hayır | Tam ES2024 |
IronPDF, SSRS'den farklı olarak belirli bir veritabanı veya sunucu ekosistemine bağlı değildir. Geliştiricilere doğrudan C# içinde PDF belgelerini dinamik olarak oluşturma, düzenleme ve manipüle etme esnekliğini sağlar. Sunucu tabanlı altyapıdan ayrılmak belirgin bir avantaj sunar—kapsamlı ve uyarlanabilir, raporlamanın ötesinde geniş bir uygulama yelpazesi için uygundur.
Modern .NET'i benimseyen ekipler için, IronPDF, SSRS'nin altyapı karmaşıklığını ortadan kaldıran bir Chromium işleme motoru sağlar.
Başlamadan Önce
Ön Koşullar
- .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet Erişimi: NuGet paketlerini yükleyebilme
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# SSRS itself is server-based, but the in-process LocalReport API
# ships via Microsoft's ReportViewerControl packages (latest 150.1652.0,
# June 2024 — .NET Framework 4.0–4.8.1 only).
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WebForms
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.Winforms
# If your project used the community .NET Core port, remove it too:
# dotnet remove package ReportViewerCore.NETCore
# Install IronPDF
dotnet add package IronPdf
# SSRS itself is server-based, but the in-process LocalReport API
# ships via Microsoft's ReportViewerControl packages (latest 150.1652.0,
# June 2024 — .NET Framework 4.0–4.8.1 only).
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WebForms
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.Winforms
# If your project used the community .NET Core port, remove it too:
# dotnet remove package ReportViewerCore.NETCore
# Install IronPDF
dotnet add package IronPdf
Lisans Yapılandırması
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Tam API Referansı
Ad Alanı Değişiklikleri
// Before: SSRS
using Microsoft.Reporting.WebForms;
using Microsoft.Reporting.WinForms;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: SSRS
using Microsoft.Reporting.WebForms;
using Microsoft.Reporting.WinForms;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports Microsoft.Reporting.WebForms
Imports Microsoft.Reporting.WinForms
' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
Temel API Eşlemeleri
| SSRS Kavramı | IronPDF Eşdeğeri | Notlar |
|---|---|---|
LocalReport |
ChromePdfRenderer |
Çekirdek oluşturma |
ServerReport |
RenderUrlAsPdf() |
URL tabanlı işleme |
.rdlc dosyaları |
HTML/CSS şablonları | Şablon formatı |
ReportParameter |
Dizi iç içe dizimi | Parametreler |
ReportDataSource |
C# verisi + HTML | Veri bağlama |
LocalReport.Render("PDF") |
RenderHtmlAsPdf() |
PDF çıktısı |
SubReport |
Birleştirilmiş PDF'ler | İç içe raporlar |
Report Server URL |
Gerekli değil | Sunucu gerekmez |
ReportViewer kontrolü |
Gerekli değil | Doğrudan PDF oluşturma |
| Dışa verilme formatları | PDF yerlidir | Odaklanmış çıktı |
Kod Göç Örnekleri
Örnek 1: HTML'den PDF'ye Dönüştürme
Önce (SSRS):
// SSRS - SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;
class SSRSHtmlToPdf
{
static void Main()
{
// Create a ReportViewer instance
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
// Load RDLC report definition
reportViewer.LocalReport.ReportPath = "Report.rdlc";
// Add HTML content as a parameter or dataset
var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
var param = new ReportParameter("HtmlContent", htmlContent);
reportViewer.LocalReport.SetParameters(param);
// Render the report to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF",
null,
out mimeType,
out encoding,
out fileNameExtension,
out streams,
out warnings);
File.WriteAllBytes("output.pdf", bytes);
}
}
// SSRS - SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;
class SSRSHtmlToPdf
{
static void Main()
{
// Create a ReportViewer instance
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
// Load RDLC report definition
reportViewer.LocalReport.ReportPath = "Report.rdlc";
// Add HTML content as a parameter or dataset
var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
var param = new ReportParameter("HtmlContent", htmlContent);
reportViewer.LocalReport.SetParameters(param);
// Render the report to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF",
null,
out mimeType,
out encoding,
out fileNameExtension,
out streams,
out warnings);
File.WriteAllBytes("output.pdf", bytes);
}
}
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.Reporting.WebForms
Imports System.IO
Class SSRSHtmlToPdf
Shared Sub Main()
' Create a ReportViewer instance
Dim reportViewer As New ReportViewer()
reportViewer.ProcessingMode = ProcessingMode.Local
' Load RDLC report definition
reportViewer.LocalReport.ReportPath = "Report.rdlc"
' Add HTML content as a parameter or dataset
Dim htmlContent As String = "<h1>Hello World</h1><p>This is HTML content.</p>"
Dim param As New ReportParameter("HtmlContent", htmlContent)
reportViewer.LocalReport.SetParameters(param)
' Render the report to PDF
Dim mimeType As String
Dim encoding As String
Dim fileNameExtension As String
Dim streams As String()
Dim warnings As Warning()
Dim bytes As Byte() = reportViewer.LocalReport.Render( _
"PDF", _
Nothing, _
mimeType, _
encoding, _
fileNameExtension, _
streams, _
warnings)
File.WriteAllBytes("output.pdf", bytes)
End Sub
End Class
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfHtmlToPdf
{
static void Main()
{
// Create a ChromePdfRenderer instance
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF file
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfHtmlToPdf
{
static void Main()
{
// Create a ChromePdfRenderer instance
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF file
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class IronPdfHtmlToPdf
Shared Sub Main()
' Create a ChromePdfRenderer instance
Dim renderer = New ChromePdfRenderer()
' Convert HTML string to PDF
Dim htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' Save the PDF file
pdf.SaveAs("output.pdf")
End Sub
End Class
Bu örnek, temel yapısal farkı gösterir. SSRS, bir ReportViewer örneği oluşturmayı, bir .rdlc rapor tanım dosyası yüklemeyi, parametreleri ayarlamayı ve ardından metadata için birden fazla out parametresi ile LocalReport.Render("PDF") çağırmayı gerektirir.
IronPDF, sadece üç satır kodla ChromePdfRenderer kullanır ve RenderHtmlAsPdf() ile işlemi tamamlar. Rapor tanım dosyaları, parametre nesneleri, meta veri işlemi gerekmez. Kapsamlı örnekler için HTML'den PDF'e dönüşüm belgelerine bakın.
Örnek 2: Üst ve Alt Bilgilerle URL'den PDF'ye
Önce (SSRS):
// SSRS - SQL Server Reporting Services
using System;
using System.IO;
using System.Net;
using Microsoft.Reporting.WebForms;
class SSRSUrlToPdf
{
static void Main()
{
// Download HTML content from URL
string url = "https://example.com";
string htmlContent;
using (var client = new WebClient())
{
htmlContent = client.DownloadString(url);
}
// Create RDLC report with header/footer configuration
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "WebReport.rdlc";
// Set parameters for header and footer
var parameters = new ReportParameter[]
{
new ReportParameter("HeaderText", "Company Report"),
new ReportParameter("FooterText", "Page " + DateTime.Now.ToString()),
new ReportParameter("HtmlContent", htmlContent)
};
reportViewer.LocalReport.SetParameters(parameters);
// Render to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF", null, out mimeType, out encoding,
out fileNameExtension, out streams, out warnings);
File.WriteAllBytes("webpage.pdf", bytes);
}
}
// SSRS - SQL Server Reporting Services
using System;
using System.IO;
using System.Net;
using Microsoft.Reporting.WebForms;
class SSRSUrlToPdf
{
static void Main()
{
// Download HTML content from URL
string url = "https://example.com";
string htmlContent;
using (var client = new WebClient())
{
htmlContent = client.DownloadString(url);
}
// Create RDLC report with header/footer configuration
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "WebReport.rdlc";
// Set parameters for header and footer
var parameters = new ReportParameter[]
{
new ReportParameter("HeaderText", "Company Report"),
new ReportParameter("FooterText", "Page " + DateTime.Now.ToString()),
new ReportParameter("HtmlContent", htmlContent)
};
reportViewer.LocalReport.SetParameters(parameters);
// Render to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF", null, out mimeType, out encoding,
out fileNameExtension, out streams, out warnings);
File.WriteAllBytes("webpage.pdf", bytes);
}
}
Imports System
Imports System.IO
Imports System.Net
Imports Microsoft.Reporting.WebForms
Class SSRSUrlToPdf
Shared Sub Main()
' Download HTML content from URL
Dim url As String = "https://example.com"
Dim htmlContent As String
Using client As New WebClient()
htmlContent = client.DownloadString(url)
End Using
' Create RDLC report with header/footer configuration
Dim reportViewer As New ReportViewer()
reportViewer.ProcessingMode = ProcessingMode.Local
reportViewer.LocalReport.ReportPath = "WebReport.rdlc"
' Set parameters for header and footer
Dim parameters As ReportParameter() = {
New ReportParameter("HeaderText", "Company Report"),
New ReportParameter("FooterText", "Page " & DateTime.Now.ToString()),
New ReportParameter("HtmlContent", htmlContent)
}
reportViewer.LocalReport.SetParameters(parameters)
' Render to PDF
Dim mimeType As String, encoding As String, fileNameExtension As String
Dim streams As String()
Dim warnings As Warning()
Dim bytes As Byte() = reportViewer.LocalReport.Render(
"PDF", Nothing, mimeType, encoding,
fileNameExtension, streams, warnings)
File.WriteAllBytes("webpage.pdf", bytes)
End Sub
End Class
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class IronPdfUrlToPdf
{
static void Main()
{
// Create a ChromePdfRenderer instance
var renderer = new ChromePdfRenderer();
// Configure rendering options with header and footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Company Report</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages} - " + DateTime.Now.ToString("MM/dd/yyyy") + "</div>"
};
// Convert URL to PDF
string url = "https://example.com";
var pdf = renderer.RenderUrlAsPdf(url);
// Save the PDF file
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class IronPdfUrlToPdf
{
static void Main()
{
// Create a ChromePdfRenderer instance
var renderer = new ChromePdfRenderer();
// Configure rendering options with header and footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Company Report</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages} - " + DateTime.Now.ToString("MM/dd/yyyy") + "</div>"
};
// Convert URL to PDF
string url = "https://example.com";
var pdf = renderer.RenderUrlAsPdf(url);
// Save the PDF file
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Class IronPdfUrlToPdf
Shared Sub Main()
' Create a ChromePdfRenderer instance
Dim renderer As New ChromePdfRenderer()
' Configure rendering options with header and footer
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center'>Company Report</div>"
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages} - " & DateTime.Now.ToString("MM/dd/yyyy") & "</div>"
}
' Convert URL to PDF
Dim url As String = "https://example.com"
Dim pdf = renderer.RenderUrlAsPdf(url)
' Save the PDF file
pdf.SaveAs("webpage.pdf")
End Sub
End Class
SSRS, URL'leri doğrudan PDF'ye dönüştüremez. HTML içeriğini WebClient.DownloadString() ile manuel olarak indirmeniz, ayrı bir .rdlc rapor dosyası oluşturmanız, HTML ve üstbilgi/altbilgi metnini ReportParameter dizileri olarak geçirmeniz, ardından karmaşık Render() yöntem imzasıyla işlemi gerçekleştirmeniz gerekmektedir.
IronPDF'in RenderUrlAsPdf() işlemin tamamını tek bir çağrıda ele alır. Üstbilgiler ve altbilgiler tam HTML/CSS ve {page} ve {total-pages} gibi yer tutucuları destekleyen HtmlHeaderFooter nesneleri ile yapılandırılır. Daha fazla bilgiyi kılavuzlarımızda öğrenin.
Örnek 3: Veritabanı Tabanlı Rapor
Önce (SSRS):
// SSRS - SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;
class SSRSDatabaseReport
{
static void Main()
{
// Create a ReportViewer instance
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "SalesReport.rdlc";
// Create database connection and fetch data
string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
using (var connection = new SqlConnection(connString))
{
var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
var dataSet = new DataSet();
adapter.Fill(dataSet, "Sales");
// Bind data to report
var dataSource = new ReportDataSource("SalesDataSet", dataSet.Tables[0]);
reportViewer.LocalReport.DataSources.Clear();
reportViewer.LocalReport.DataSources.Add(dataSource);
}
// Render to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF", null, out mimeType, out encoding,
out fileNameExtension, out streams, out warnings);
File.WriteAllBytes("sales-report.pdf", bytes);
}
}
// SSRS - SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;
class SSRSDatabaseReport
{
static void Main()
{
// Create a ReportViewer instance
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "SalesReport.rdlc";
// Create database connection and fetch data
string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
using (var connection = new SqlConnection(connString))
{
var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
var dataSet = new DataSet();
adapter.Fill(dataSet, "Sales");
// Bind data to report
var dataSource = new ReportDataSource("SalesDataSet", dataSet.Tables[0]);
reportViewer.LocalReport.DataSources.Clear();
reportViewer.LocalReport.DataSources.Add(dataSource);
}
// Render to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF", null, out mimeType, out encoding,
out fileNameExtension, out streams, out warnings);
File.WriteAllBytes("sales-report.pdf", bytes);
}
}
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.Reporting.WebForms
Imports System.IO
Class SSRSDatabaseReport
Shared Sub Main()
' Create a ReportViewer instance
Dim reportViewer As New ReportViewer()
reportViewer.ProcessingMode = ProcessingMode.Local
reportViewer.LocalReport.ReportPath = "SalesReport.rdlc"
' Create database connection and fetch data
Dim connString As String = "Server=localhost;Database=SalesDB;Integrated Security=true;"
Using connection As New SqlConnection(connString)
Dim adapter As New SqlDataAdapter("SELECT * FROM Sales", connection)
Dim dataSet As New DataSet()
adapter.Fill(dataSet, "Sales")
' Bind data to report
Dim dataSource As New ReportDataSource("SalesDataSet", dataSet.Tables(0))
reportViewer.LocalReport.DataSources.Clear()
reportViewer.LocalReport.DataSources.Add(dataSource)
End Using
' Render to PDF
Dim mimeType As String, encoding As String, fileNameExtension As String
Dim streams As String()
Dim warnings As Warning()
Dim bytes As Byte() = reportViewer.LocalReport.Render("PDF", Nothing, mimeType, encoding, fileNameExtension, streams, warnings)
File.WriteAllBytes("sales-report.pdf", bytes)
End Sub
End Class
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;
class IronPdfDatabaseReport
{
static void Main()
{
// Create database connection and fetch data
string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
var dataTable = new DataTable();
using (var connection = new SqlConnection(connString))
{
var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
adapter.Fill(dataTable);
}
// Build HTML table from data
var htmlBuilder = new StringBuilder();
htmlBuilder.Append("<h1>Sales Report</h1><table border='1'><tr>");
foreach (DataColumn column in dataTable.Columns)
htmlBuilder.Append($"<th>{column.ColumnName}</th>");
htmlBuilder.Append("</tr>");
foreach (DataRow row in dataTable.Rows)
{
htmlBuilder.Append("<tr>");
foreach (var item in row.ItemArray)
htmlBuilder.Append($"<td>{item}</td>");
htmlBuilder.Append("</tr>");
}
htmlBuilder.Append("</table>");
// Convert to PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
pdf.SaveAs("sales-report.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;
class IronPdfDatabaseReport
{
static void Main()
{
// Create database connection and fetch data
string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
var dataTable = new DataTable();
using (var connection = new SqlConnection(connString))
{
var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
adapter.Fill(dataTable);
}
// Build HTML table from data
var htmlBuilder = new StringBuilder();
htmlBuilder.Append("<h1>Sales Report</h1><table border='1'><tr>");
foreach (DataColumn column in dataTable.Columns)
htmlBuilder.Append($"<th>{column.ColumnName}</th>");
htmlBuilder.Append("</tr>");
foreach (DataRow row in dataTable.Rows)
{
htmlBuilder.Append("<tr>");
foreach (var item in row.ItemArray)
htmlBuilder.Append($"<td>{item}</td>");
htmlBuilder.Append("</tr>");
}
htmlBuilder.Append("</table>");
// Convert to PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
pdf.SaveAs("sales-report.pdf");
}
}
Imports IronPdf
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Text
Class IronPdfDatabaseReport
Shared Sub Main()
' Create database connection and fetch data
Dim connString As String = "Server=localhost;Database=SalesDB;Integrated Security=true;"
Dim dataTable As New DataTable()
Using connection As New SqlConnection(connString)
Dim adapter As New SqlDataAdapter("SELECT * FROM Sales", connection)
adapter.Fill(dataTable)
End Using
' Build HTML table from data
Dim htmlBuilder As New StringBuilder()
htmlBuilder.Append("<h1>Sales Report</h1><table border='1'><tr>")
For Each column As DataColumn In dataTable.Columns
htmlBuilder.Append($"<th>{column.ColumnName}</th>")
Next
htmlBuilder.Append("</tr>")
For Each row As DataRow In dataTable.Rows
htmlBuilder.Append("<tr>")
For Each item In row.ItemArray
htmlBuilder.Append($"<td>{item}</td>")
Next
htmlBuilder.Append("</tr>")
Next
htmlBuilder.Append("</table>")
' Convert to PDF
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString())
pdf.SaveAs("sales-report.pdf")
End Sub
End Class
SSRS, önceden tasarlanmış bir .rdlc rapor dosyası ('SalesReport.rdlc'), bir DataSet doldurma, rapor tanımı ile eşleşmesi gereken belirli bir ad ('SalesDataSet') ile bir ReportDataSource oluşturma, mevcut veri kaynaklarını temizleme, yeni veri kaynağını ekleme ve ardından çıktıyı gerçekleştirme gerektirir.
IronPDF, mevcut veri erişim kodunuzu (aynı SqlDataAdapter deseni) kullanır, ardından HTML'i dinamik olarak StringBuilder ile oluşturur. Standart HTML/CSS kullanarak düzen üzerinde tam kontrole sahipsiniz—özel rapor tanım dosyalarına gerek yok.
Özellik Karşılaştırması
| Özellik | SSRS | IronPDF | |||
|---|---|---|---|---|---|
| :Altyapı: | Sunucu Gerekli | Evet (Rapor Sunucusu) | Hayır | ||
| SQL Server Lisansı | Gereklidir | Gerekli değil | |||
| Windows Server | Gereklidir | Herhangi bir platform | |||
| Veritabanı Gerekli | Evet (ReportServer DB) | Hayır | |||
| :Geliştirme: | Görsel Tasarımcı | Evet (.rdlc) | HTML editörleri | ||
| Şablon Biçimi | RDLC/RDL | HTML/CSS/Razor | |||
| Veri Kaynakları | Yerleşik DSN | Herhangi bir C# verisi | |||
| :Oluşturma: | HTML'den PDF'ye | Hayır | Tam Chromium | ||
| URL'yi PDF'ye çevir | Hayır | Evet | |||
| CSS Desteği | Sınırlı | Tam CSS3 | |||
| JavaScript | Hayır | Tam ES2024 | |||
| Grafikler | Yerleşik | JS kütüphaneleri ile | |||
| :Dağıtım: | Rapor Dağıtımı | Sunucuya | Uygulama ile | ||
| Yapılandırma | Karmaşık | Basit | |||
| Bakım | Yüksek | Düşük |
Yaygın Geçiş Sorunları
Sorun 1: RDLC Rapor Tanımlamaları
SSRS: Özel .rdlc XML formatını kullanır.
Çözüm: HTML şablonlarına dönüştür:
- Visual Studio'da .rdlc'yi açın
- Düzen yapısını belgeleyin
- HTML/CSS'de yeniden oluşturun
- Veri bağlama için Razor kullanın
Sorun 2: Paylaşılan Veri Kaynakları
SSRS: Rapor Sunucusunda bağlantı dizeleri.
Çözüm: Uygulamanızın veri erişim katmanını kullanın:
var data = await _dbContext.Sales.ToListAsync();
// Then bind to HTML template
var data = await _dbContext.Sales.ToListAsync();
// Then bind to HTML template
Dim data = Await _dbContext.Sales.ToListAsync()
' Then bind to HTML template
Sorun 3: Rapor Parametreleri UI
SSRS: Dahili parametre istemleri.
Çözüm: Uygulamanızda parametre UI'si oluşturun:
// Your own parameter form, then:
var pdf = GenerateReport(startDate, endDate, region);
// Your own parameter form, then:
var pdf = GenerateReport(startDate, endDate, region);
' Your own parameter form, then:
Dim pdf = GenerateReport(startDate, endDate, region)
Sorun 4: Abonelikler/Programlanmış Raporlar
SSRS: Dahili abonelik motoru.
Çözüm: Arka plan iş çerçevesini kullanın:
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
() => GenerateAndEmailReport(), Cron.Weekly);
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
() => GenerateAndEmailReport(), Cron.Weekly);
Geçiş Kontrol Listesi
Öncesi-Geçiş
- Tüm SSRS raporlarını envanterleyin (
.rdlcdosyaları) - Veri kaynaklarını ve bağlantıları belgeleyin
- Görsel referans için rapor düzenlerinin ekran görüntüsünü alın
- Her rapor için rapor parametrelerini listeleyin
- Abonelik programlarını not alın
- ironpdf.com adresinden IronPDF lisans anahtarını edinin
Kod Güncellemeleri
- ReportViewer paketlerini kaldır
IronPdfNuGet paketini kurun.rdlcdosyalarını HTML şablonlarına dönüştürünLocalReportyerineChromePdfRendererkullanınReportDataSourceyerine C# veri + HTML şablonları kullanınReportParameteryerine dize interpolasyonu kullanınLocalReport.Render("PDF")yerineRenderHtmlAsPdf()kullanınHtmlHeaderFooterile üstbilgi/altbilgi uygulayın- Uygulama başlangıcında lisans başlatma ekle
Altyapı
- Rapor Sunucusu devre dışı bırakma planı yap
- Abonelikleri iş planlayıcısına (Hangfire, vb.) taşı
- Dağıtım betiklerini güncelleyin
Test Etme
- PDF çıktısını görsel olarak karşılaştır
- Veri doğruluğunu kontrol et
- Sayfalandırmayı test et
- Tüm parametreleri kontrol et
- Performans testi yapın

