Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przeprowadzić migrację z SSRS do IronPDF w języku C#

Migracja z SQL Server Reporting Services (SSRS) na IronPDF przekształca twój przepływ pracy generacji PDF z ciężkiej, serwerowej infrastruktury na lekką, biblioteczkę wewnątrz aplikacji, która może być osadzona bezpośrednio w dowolnej aplikacji .NET. Ten przewodnik dostarcza pełną, szczegółową ścieżkę migracji, która eliminuje zależności SQL Server, obciążenie serwera raportów i zamknięcie w ekosystemie Microsoft.

Dlaczego migrować z SSRS do IronPDF

Zrozumienie SSRS

SQL Server Reporting Services (SSRS) to platforma raportowa firmy Microsoft dla przedsiębiorstw — pełen zestaw do tworzenia, wdrażania i zarządzania raportami, ściśle zintegrowany z ekosystemem SQL Server. Microsoft potwierdził, że SSRS 2022 to ostatnia niezależna wersja: począwszy od SQL Server 2025, raportowanie lokalne zostanie skoncentrowane w Power BI Report Server (PBIRS), a nowe wersje SSRS nie będą publikowane. SSRS 2022 otrzymuje aktualizacje zabezpieczeń do 11 stycznia 2033, zgodnie z cyklem życia SQL Server 2022 (zobacz FAQ o konsolidacji usług raportowania).

Dla wielu scenariuszy generowania PDF, infrastruktura SSRS jest nadmiarem. Kluczowe powody do migracji obejmują:

  1. Koniec z SSRS: SQL Server 2025 jest dostarczany bez SSRS; PBIRS go zastępuje. Nowe prace skierowane na SSRS to ślepa uliczka.
  2. Ciężka infrastruktura: Wymaga SQL Server, Report Server i (dla starszego widoku Web Forms) konfiguracji IIS
  3. Uwiązanie przez ekosystem Microsoft: Powiązane z licencjonowaniem SQL Server i Windows Server
  4. Złożona implementacja: Wdrożenie raportów, konfiguracja zabezpieczeń i zarządzanie subskrypcjami
  5. Drogie licencjonowanie: Licencje SQL Server, zwłaszcza dla funkcji przedsiębiorstwa
  6. Brak wsparcia pierwszej klasy dla .NET Core: pakiety Microsoft Microsoft.ReportingServices.ReportViewerControl.WebForms / .Winforms są przeznaczone tylko dla .NET Framework 4.0–4.8.1. Użytkownicy .NET Core / .NET 5+ polegają na porcie społecznościowym ReportViewerCore.NETCore.
  7. Dodatkowe obciążenie konserwacyjne: Łatanie serwera, konserwacja baz danych, zarządzanie raportami
  8. Brak opcji zintegrowanej z chmurą: Zaprojektowane dla środowisk lokalnych, wsparcie w chmurze jest niezręczne

Kiedy SSRS to przesada

Twoje potrzeby SSRS narzut
Generowanie faktur Pełny serwer raportów
Eksport tabel danych Licencja SQL Server
Tworzenie plików PDF na podstawie danych Windows Server
Proste generowanie dokumentów Subskrypcje raportów

IronPDF umożliwia generowanie plików PDF w trakcie przetwarzania bez konieczności posiadania infrastruktury serwerowej.

Porównanie SSRS z IronPDF

Funkcja SSRS IronPDF
Zależności Wymaga SQL Server Brak konkretnej zależności od bazy danych
Wdrożenie Oparte na serwerze Biblioteka (wbudowana w aplikacje)
Integracja Ścisła integracja z Microsoftem Działa z dowolnym źródłem danych
Wizualizacja danych Szeroki wybór opcji językowych Wizualizacje skupione na plikach PDF
Złożoność Wysoki (wymagana konfiguracja serwera) Umiarkowana do niskiej (konfiguracja biblioteki)
Koszt Koszty licencji SQL Server Koszt licencji dla programisty
HTML do PDF Nie Pełny Chromium
URL do pliku PDF Nie Tak
Obsługa CSS Ograniczone Pełny CSS3
JavaScript Nie Pełna wersja ES2024

IronPDF, w odróżnieniu od SSRS, nie jest związany z żadnym specyficznym ekosystemem baz danych ani serwerów. Zapewnia deweloperom elastyczną bibliotekę do dynamicznego tworzenia, edytowania i manipulowania dokumentami PDF bezpośrednio w C#. To rozdzielenie od infrastruktury opartej na serwerze oferuje zauważalną korzyść — jest proste i elastyczne, nadające się do szerokiej gamy aplikacji, nie tylko do raportowania.

Dla zespołów przyjmujących nowoczesny .NET, IronPDF dostarcza silnik renderujący Chromium, który eliminuje złożoność infrastruktury SSRS.


Zanim zaczniesz

Wymagania wstępne

  1. Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Dostęp do NuGet: Możliwość instalowania pakietów NuGet
  3. Licencja IronPDF: Uzyskaj klucz licencyjny na stronie ironpdf.com

Zmiany w pakiecie NuGet

# 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
SHELL

Konfiguracja licencji

// 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"
$vbLabelText   $csharpLabel

Kompletna dokumentacja API

Zmiany w przestrzeni nazw

// 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
$vbLabelText   $csharpLabel

Mapowania podstawowych interfejsów API

Koncepcja SSRS Odpowiednik IronPDF Uwagi
LocalReport ChromePdfRenderer Renderowanie rdzenia
ServerReport RenderUrlAsPdf() Renderowanie oparte na URL
.rdlc pliki Szablony HTML/CSS Format szablonu
ReportParameter Interpolacja ciągów znaków Parametry
ReportDataSource Dane C# + HTML Powiązanie danych
LocalReport.Render("PDF") RenderHtmlAsPdf() Wynik w formacie PDF
SubReport Połączone pliki PDF Raporty zagnieżdżone
Report Server URL Nie jest potrzebne Nie wymaga serwera
ReportViewer kontrola Nie jest potrzebne Bezpośrednia generacja PDF
Formaty eksportu PDF jest formatem natywnym Skoncentrowane output

Przykłady migracji kodu

Przykład 1: Konwersja HTML do PDF

Before (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, 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("output.pdf", bytes)
    End Sub
End Class
$vbLabelText   $csharpLabel

Po (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
$vbLabelText   $csharpLabel

Ten przykład ilustruje podstawową różnicę architektoniczną. SSRS wymaga utworzenia instancji ReportViewer, załadowania pliku definicji raportu .rdlc, ustawienia parametrów, a następnie wywołania LocalReport.Render("PDF") z wieloma out parametrami metadanych.

IronPDF używa ChromePdfRenderer z RenderHtmlAsPdf() w zaledwie trzech liniach kodu. Nie są wymagane pliki definicji raportów, obiekty parametrów ani obsługa metadanych. Kompleksowe przykłady można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.

Przykład 2: URL do PDF z nagłówkami i stopkami

Before (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
$vbLabelText   $csharpLabel

Po (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
$vbLabelText   $csharpLabel

SSRS nie może bezpośrednio konwertować URL do PDF. Musisz ręcznie pobrać treść HTML za pomocą WebClient.DownloadString(), utworzyć oddzielny plik raportu .rdlc, przekazać treść HTML i tekst nagłówka/stopki jako tablice ReportParameter, a następnie wyrenderować złożonym podpisem metody Render().

RenderUrlAsPdf() w IronPDF obsługuje cały proces jednym wywołaniem. Nagłówki i stopki są konfigurowane z obiektami HtmlHeaderFooter, które obsługują pełny HTML/CSS i placeholdery jak {page} i {total-pages}. Dowiedz się więcej z naszych samouczków.

Przykład 3: Raport oparty na bazie danych

Before (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
        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("sales-report.pdf", bytes)
    End Sub
End Class
$vbLabelText   $csharpLabel

Po (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
$vbLabelText   $csharpLabel

SSRS wymaga wstępnie zaprojektowanego pliku raportu .rdlc ("SalesReport.rdlc"), wypełnienia DataSet, stworzenia ReportDataSource z określoną nazwą ("SalesDataSet"), która musi zgadzać się z definicją raportu, usunięcia istniejących źródeł danych, dodania nowego źródła danych, a następnie renderowania.

IronPDF używa Twojego istniejącego kodu dostępu do danych (ten sam wzorzec SqlDataAdapter), a następnie dynamicznie buduje HTML za pomocą StringBuilder. Masz pełną kontrolę nad układem używając standardowego HTML/CSS — nie są wymagane pliki definicji raportów.


Porównanie funkcji

Funkcja SSRS IronPDF
:Infrastructure: Wymagany serwer Tak (Serwer raportów) Nie
Licencja SQL Server Wymagane Nie jest potrzebne
Windows Server Wymagane Dowolna platforma
Wymagana baza danych Tak (baza danych ReportServer) Nie
:Rozwój: Projektant wizualny Tak (.rdlc) Edytory HTML
Format szablonu RDLC/RDL HTML/CSS/Razor
Źródła danych Wbudowany DSN Wszelkie dane w języku C#
:Rendering: HTML do PDF Nie Pełny Chromium
URL do pliku PDF Nie Tak
Obsługa CSS Ograniczone Pełny CSS3
JavaScript Nie Pełna wersja ES2024
Wykresy Wbudowane Za pośrednictwem bibliotek JS
:Wdrozenie: Wdrożenie raportu Do serwera Z aplikacją
Konfiguracja Złożone Proste
Konserwacja Wysoka Niski

Typowe problemy związane z migracją

Problem 1: Definicje raportów RDLC

SSRS: Używa własnego formatu XML .rdlc.

Rozwiązanie: Konwersja na szablony HTML:

  1. Otwórz .rdlc w Visual Studio
  2. Opisz strukturę układu
  3. Odtwórz w HTML/CSS
  4. Użyj Razor do łączenia danych

Problem 2: Udostępnione źródła danych

SSRS: Łańcuchy połączeń w Report Server.

Rozwiązanie: Użyj warstwy dostępu do danych aplikacji:

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
$vbLabelText   $csharpLabel

Problem 3: UI parametrów raportu

SSRS: Wbudowane wywołania parametrów.

Rozwiązanie: Zbuduj UI parametrów w swojej aplikacji:

// 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)
$vbLabelText   $csharpLabel

Problem 4: Subskrypcje/zaplanowane raporty

SSRS: Wbudowany silnik subskrypcji.

Rozwiązanie: Użyj frameworka prac w tle:

// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
    () => GenerateAndEmailReport(), Cron.Weekly);
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
    () => GenerateAndEmailReport(), Cron.Weekly);
$vbLabelText   $csharpLabel

Lista kontrolna migracji

Przed migracją

  • Inwentaryzacja wszystkich raportów SSRS (pliki .rdlc)
  • Udokumentuj źródła danych i połączenia
  • Zrób zrzut ekranowy układów raportów dla odniesienia wizualnego
  • Wypisz parametry raportów dla każdego raportu
  • Zapisz harmonogramy subskrypcji
  • Uzyskaj klucz licencyjny IronPDF ze strony ironpdf.com

Aktualizacje kodu

  • Usuń pakiety ReportViewer
  • Instalacja pakietu NuGet IronPdf
  • Konwersja plików .rdlc na szablony HTML
  • Zastąp LocalReport przez ChromePdfRenderer
  • Zastąp ReportDataSource przez dane C# + szablony HTML
  • Zastąp ReportParameter przez interpolację łańcuchów
  • Zastąp LocalReport.Render("PDF") przez RenderHtmlAsPdf()
  • Zastosuj nagłówki/stopki za pomocą HtmlHeaderFooter
  • Dodaj inicjalizację licencji podczas uruchamiania aplikacji

Infrastruktura

  • Zaplanuj wycofanie z użytkowania serwera raportów
  • Zmiany subskrypcji na planista zadań (np. Hangfire)
  • Aktualizacja skryptów wdrażania

Testowanie

  • Porównaj wizualnie wynik PDF
  • Zweryfikuj dokładność danych
  • Przetestuj paginację
  • Sprawdź wszystkie parametry
  • Testy wydajności

Zwróć uwagęSSRS jest zarejestrowanym znakiem towarowym jego odpowiedniego właściciela. Ta strona nie jest powiązana z firmą Microsoft, nie jest przez nią promowana ani sponsorowana. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie