IRONXL VERWENDEN

Wie man Daten aus einer CSV-Datei liest und in einer C#-Datenbank speichert

Veröffentlicht 27. Januar 2024
Teilen Sie:

In der digitalen Welt von heute ist der effiziente Umgang mit Daten eine wichtige Aufgabe. Eine häufige Anforderung bei der Softwareentwicklung ist das Lesen von Daten aus einer CSV-Datei und deren Speicherung in einer Datenbank. Dieses Tutorial behandelt die Schritte zum Lesen von Daten aus einer CSV-Datei und zum Speichern in einer SQL Server-Datenbank mit C#, insbesondere unter Verwendung der IronXL-Bibliothek. Dieser Leitfaden richtet sich an Anfänger und wird auf einfache, ansprechende Weise erklärt.

Verstehen der Grundlagen

*Was ist eine CSV-Datei?

A CSV (Komma-getrennte Werte) datei ist eine reine Textdatei, die durch Kommas getrennte Daten enthält. Aufgrund seiner Einfachheit und Kompatibilität mit verschiedenen Anwendungen, wie z. B. Excel, ist es ein beliebtes Format für die Übertragung von Daten.

Die Rolle von SQL Server und Datenbanken

SQL Server ist ein Datenbankmanagementsystem von Microsoft. Sie dient der strukturierten Speicherung und Verwaltung von Daten. In unserem Fall werden wir die CSV-Daten in einer SQL Server-Tabelle speichern.

Einführung in IronXL

IronXL ist eine auf .NET-Anwendungen zugeschnittene Excel-Bibliothek, die es Entwicklern ermöglicht, Excel-Dateien zu lesen, zu generieren und zu bearbeiten, ohne dass sie die Microsoft Office Interop benötigen. Diese Bibliothek zeichnet sich durch ihre Kompatibilität mit verschiedenen .NET-Versionen und -Plattformen aus, einschließlich .NET Core, .NET-Standard und .NET-Framework, sowie durch ihre Unterstützung für verschiedene Betriebssysteme wie Windows, Linux und macOS. Es ist eine leistungsstarke Bibliothek für den Datenimport, insbesondere für die Bearbeitung von CSV-Dateien.

Wie man Daten aus CSV-Dateien in C# liest und speichert;

  1. Erstellen Sie ein C#-Konsolenprogramm in Visual Studio.

  2. Installieren Sie die CSV-Bibliothek mit NuGet Package Manager.

  3. Laden Sie die CSV-Datei mit Hilfe der Bibliothek in das Programm.

  4. Erstellen Sie eine Verbindung mit der Datenbank.

  5. Lesen Sie den Inhalt der CSV-Datei mit Hilfe der Bibliothek.

  6. Kopieren Sie diesen Inhalt mit der Methode SqlBulkCopy in die Datenbank.

    Hier ist ein Beispiel-Codeausschnitt:

using System;
using System.Data;
using System.Data.SqlClient;
using CsvHelper;

namespace CsvReader
{
    class Program
    {
        static void Main(string [] args)
        {
            string csvPath = @"path\to\your\csv\file.csv";

            using (var reader = new StreamReader(csvPath))
            using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
            {
                var records = csv.GetRecords<YourModel>();

                using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
                {
                    sqlBulkCopy.DestinationTableName = "YourTableName";
                    sqlBulkCopy.WriteToServer(records.AsDataReader());
                }

                Console.WriteLine("Data imported successfully!");
            }
        }
    }
}
using System;
using System.Data;
using System.Data.SqlClient;
using CsvHelper;

namespace CsvReader
{
    class Program
    {
        static void Main(string [] args)
        {
            string csvPath = @"path\to\your\csv\file.csv";

            using (var reader = new StreamReader(csvPath))
            using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
            {
                var records = csv.GetRecords<YourModel>();

                using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
                {
                    sqlBulkCopy.DestinationTableName = "YourTableName";
                    sqlBulkCopy.WriteToServer(records.AsDataReader());
                }

                Console.WriteLine("Data imported successfully!");
            }
        }
    }
}
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports CsvHelper

Namespace CsvReader
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			Dim csvPath As String = "path\to\your\csv\file.csv"

			Using reader = New StreamReader(csvPath)
			Using csv = New CsvReader(reader, CultureInfo.InvariantCulture)
				Dim records = csv.GetRecords(Of YourModel)()

				Using sqlBulkCopy As New SqlBulkCopy("your_connection_string")
					sqlBulkCopy.DestinationTableName = "YourTableName"
					sqlBulkCopy.WriteToServer(records.AsDataReader())
				End Using

				Console.WriteLine("Data imported successfully!")
			End Using
			End Using
		End Sub
	End Class
End Namespace
VB   C#

Ersetzen Sie "path\to\your\csv\file.csv" durch den tatsächlichen Pfad zu Ihrer CSV-Datei, "YourModel" durch das Modell, das Ihre CSV-Daten darstellt, "your_connection_string" durch Ihre Datenbankverbindungszeichenfolge und "YourTableName" durch den Namen Ihrer Datenbanktabelle.

Einrichten der Umgebung

Voraussetzungen

  1. Visual Studio: Stellen Sie sicher, dass Sie Visual Studio installiert haben.

  2. SQL Server: Sie sollten SQL Server installiert und zugänglich haben.

  3. IronXL-Installation: Installieren Sie IronXL, indem Sie den folgenden NuGet-Befehl ausführen:
Install-Package IronXL.Excel

oder

dotnet add package IronXL

Stellen Sie sicher, dass Sie diese Befehle in dem Projektverzeichnis ausführen, in dem Sie IronXL installieren möchten.

Erstellen einer SQL Server-Tabelle

Bevor Sie Daten importieren, erstellen Sie eine Zieltabelle in Ihrer SQL Server-Datenbank. In dieser Tabelle werden die CSV-Daten gespeichert.

CREATE TABLE YourTableName (
    Column1 DataType,
    Column2 DataType,
    ...
);

Ersetzen Sie IhrTabellenname, Spalte1, Spalte2 und Datentyp durch Ihre spezifischen Angaben.

Schritt-für-Schritt-Anleitung zum Importieren von CSV-Daten

  1. Stellen Sie zunächst sicher, dass Sie eine CSV-Datei mit den Daten haben, die Sie importieren möchten.

  2. Erstellen Sie ein neues C#-Konsolenanwendungsprojekt in Visual Studio.

  3. Installieren Sie das NuGet-Paket CsvHelper zum Lesen von CSV-Dateien. Sie können dies tun, indem Sie die NuGet Package Manager Console in Visual Studio öffnen und den folgenden Befehl ausführen:
    :installCmd Install-Package CsvHelper
  1. Fügen Sie die erforderlichen using-Anweisungen am Anfang Ihrer C#-Code-Datei hinzu:
    using System;
    using System.IO;
    using CsvHelper;
    using System;
    using System.IO;
    using CsvHelper;
Imports System
	Imports System.IO
	Imports CsvHelper
VB   C#
  1. Geben Sie in Ihrem Code den Pfad zu Ihrer CSV-Datei an. Zum Beispiel:
    string csvFilePath = @"C:\path\to\your\csv\file.csv";
    string csvFilePath = @"C:\path\to\your\csv\file.csv";
Dim csvFilePath As String = "C:\path\to\your\csv\file.csv"
VB   C#

Stellen Sie sicher, dass Sie "C:\path\to\your\csv\file.csv" durch den tatsächlichen Pfad zu Ihrer CSV-Datei ersetzen.

  1. Erstellen Sie eine neue Instanz der Klasse StreamReader, um die CSV-Datei zu lesen:
    using (var reader = new StreamReader(csvFilePath))
    {
        // code goes here
    }
    using (var reader = new StreamReader(csvFilePath))
    {
        // code goes here
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. Erstellen Sie eine neue Instanz der Klasse "CsvReader" und übergeben Sie das Objekt "StreamReader":
    using (var reader = new StreamReader(csvFilePath))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        // code goes here
    }
    using (var reader = new StreamReader(csvFilePath))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        // code goes here
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. Optional können Sie das Objekt "CsvReader" mit den erforderlichen Einstellungen konfigurieren. Zum Beispiel:
    csv.Configuration.HasHeaderRecord = true;
    csv.Configuration.HasHeaderRecord = true;
csv.Configuration.HasHeaderRecord = True
VB   C#
  1. Verwenden Sie die Funktion GetRecords<T>()methode des "CsvReader"-Objekts, um die CSV-Daten in eine Sammlung von Objekten zu lesen. Ersetzenmit der Art des Objekts, das jeden Datensatz in der CSV-Datei darstellt. Zum Beispiel:
    var records = csv.GetRecords<YourModel>();
    var records = csv.GetRecords<YourModel>();
Dim records = csv.GetRecords(Of YourModel)()
VB   C#

Stellen Sie sicher, dass Sie "IhrModell" durch den tatsächlichen Namen Ihrer Modellklasse ersetzen.

  1. Iterieren Sie über die Datensätze und führen Sie alle erforderlichen Verarbeitungen oder Überprüfungen durch:
    foreach (var record in records)
    {
        // code goes here
    }
    foreach (var record in records)
    {
        // code goes here
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. Optional können Sie eine Verbindung zu Ihrer SQL Server-Datenbank mit ADO.NET oder einem ORM-Tool wie Entity Framework herstellen.

  2. Fügen Sie jeden Datensatz mit dem von Ihnen gewählten Datenbankzugriffsmechanismus in die Datenbank ein. Wenn Sie z. B. ADO.NET verwenden, können Sie die Klasse "SqlBulkCopy" nutzen, um die Daten effizient in großen Mengen einzufügen.

  3. Behandeln Sie alle Ausnahmen, die während des Importvorgangs auftreten können, und geben Sie entsprechende Fehlermeldungen oder Protokolle aus.

  4. Testen Sie Ihre Anwendung, indem Sie sie ausführen und überprüfen, ob die CSV-Daten erfolgreich in Ihre Datenbank importiert wurden.

    Das war's! Sie haben nun erfolgreich CSV-Daten mit C# in Ihre SQL Server-Datenbank importiert.

Schritt 1: Lesen der CSV-Datei

Wenn Sie mit dem Importieren von Daten aus einer CSV-Datei beginnen, besteht der erste wichtige Schritt darin, die Daten in der Datei genau zu lesen. Jede Zeile in einer CSV-Datei stellt normalerweise einen Datensatz dar, und jeder Datensatz besteht aus einem oder mehreren Feldern, die durch Kommas getrennt sind.

Wir verwenden dann die IronXL-Bibliothek, um die CSV-Datei zu verarbeiten. Um die CSV-Datei mit IronXL zu lesen, verwenden Sie die Klassen WorkBook und WorkSheet. Die Klasse WorkBook repräsentiert ein komplettes Tabellenblatt, das eine Excel-Datei oder, in unserem Fall, eine CSV-Datei sein kann. Wenn Sie den Pfad der CSV-Datei in ein WorkBook-Objekt laden, behandelt IronXL die CSV-Datei als eine Tabellenkalkulation/Datentabelle.

using IronXL;
public class CSVReader
{
    public DataTable ReadCSV(string filePath)
    {
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert to DataTable for easier processing
        DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
        return dataTable;
    }
}
using IronXL;
public class CSVReader
{
    public DataTable ReadCSV(string filePath)
    {
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert to DataTable for easier processing
        DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
        return dataTable;
    }
}
Imports IronXL
Public Class CSVReader
	Public Function ReadCSV(ByVal filePath As String) As DataTable
		Dim workbook As WorkBook = WorkBook.Load(filePath)
		Dim sheet As WorkSheet = workbook.DefaultWorkSheet
		' Convert to DataTable for easier processing
		Dim dataTable As DataTable = sheet.ToDataTable(True) ' Set to 'true' if your CSV has a header row
		Return dataTable
	End Function
End Class
VB   C#

Schritt 2: Herstellen einer Datenbankverbindung

Das Herstellen einer Verbindung zu Ihrer SQL Server-Datenbank ist ein grundlegender Schritt im Prozess der Speicherung Ihrer CSV-Daten. In diesem Schritt wird eine Kommunikationsverbindung zwischen Ihrer Anwendung und dem Datenbankserver hergestellt. Eine erfolgreiche Verbindung ist von entscheidender Bedeutung, denn ohne sie wäre die Übertragung von Daten in die Datenbank unmöglich.

In diesem Schritt geht es um das Erstellen und Öffnen einer Verbindung mithilfe einer Verbindungszeichenfolge in C#. Die Verbindungszeichenfolge ist eine wichtige Komponente, da sie die für den Verbindungsaufbau erforderlichen Informationen enthält. Er ist wie ein Schlüssel, der die Tür zu Ihrer Datenbank öffnet.

public class DatabaseConnector
{
    private string connectionString = "your_connection_string_here";

    public SqlConnection ConnectToDatabase()
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
public class DatabaseConnector
{
    private string connectionString = "your_connection_string_here";

    public SqlConnection ConnectToDatabase()
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
Public Class DatabaseConnector
	Private connectionString As String = "your_connection_string_here"

	Public Function ConnectToDatabase() As SqlConnection
		Dim connection As New SqlConnection(connectionString)
		connection.Open()
		Return connection
	End Function
End Class
VB   C#

Die Variable connectionString enthält alle notwendigen Details für die Verbindung zu Ihrem SQL Server. Sie enthält in der Regel den Servernamen, den Datenbanknamen, die Benutzer-ID und das Passwort. Ein Beispiel für einen Verbindungsstring sieht wie folgt aus: server=MeineServerAdresse;Datenbank=MeineDatenbank;Benutzerkennung=MeinBenutzername;Passwort=MeinKennwort;`. Ersetzen Sie diese Platzhalter unbedingt durch Ihre tatsächlichen Serverdaten.

Schritt 3: Speichern von Daten in der Datenbank

Nachdem eine Verbindung mit der SQL Server-Datenbank hergestellt wurde, besteht der nächste wichtige Schritt darin, die CSV-Daten in der Datenbank zu speichern. In diesem Schritt werden die gelesenen und verarbeiteten Daten in Ihre SQL Server-Tabelle übertragen. Sie ist ein entscheidender Teil des Datenverarbeitungsprozesses, da sie die tatsächliche Datenmigration von einer lokalen Datei zu einem Datenbankserver beinhaltet.

In diesem Schritt konzentrieren wir uns darauf, wie die CSV-Daten, die nun in einer DataTable gespeichert sind, in die SQL Server-Datenbank übertragen werden. Wir verwenden eine Kombination aus C#- und SQL-Server-Funktionen, um diese Aufgabe effizient zu bewältigen.

public class DataImporter
{
    public void ImportData(DataTable dataTable)
    {
        using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
        {
            // Check if the table exists and create it if it does not.
            string tableName = "CSVData"; // Use a valid SQL table name format
            string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
            string createTable = "CREATE TABLE " + tableName + " (";
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                createTable += $"[{dataTable.Columns [i].ColumnName}] NVARCHAR(MAX)";
                if (i < dataTable.Columns.Count - 1)
                    createTable += ", ";
            }
            createTable += ") END";
            SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
            createTableCommand.ExecuteNonQuery();

            // Now we use SqlBulkCopy to import the data
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = tableName;
                try
                {
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("Data imported successfully!");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}
public class DataImporter
{
    public void ImportData(DataTable dataTable)
    {
        using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
        {
            // Check if the table exists and create it if it does not.
            string tableName = "CSVData"; // Use a valid SQL table name format
            string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
            string createTable = "CREATE TABLE " + tableName + " (";
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                createTable += $"[{dataTable.Columns [i].ColumnName}] NVARCHAR(MAX)";
                if (i < dataTable.Columns.Count - 1)
                    createTable += ", ";
            }
            createTable += ") END";
            SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
            createTableCommand.ExecuteNonQuery();

            // Now we use SqlBulkCopy to import the data
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = tableName;
                try
                {
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("Data imported successfully!");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}
Public Class DataImporter
	Public Sub ImportData(ByVal dataTable As DataTable)
		Using connection As SqlConnection = (New DatabaseConnector()).ConnectToDatabase()
			' Check if the table exists and create it if it does not.
			Dim tableName As String = "CSVData" ' Use a valid SQL table name format
			Dim checkTable As String = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN "
			Dim createTable As String = "CREATE TABLE " & tableName & " ("
			For i As Integer = 0 To dataTable.Columns.Count - 1
				createTable &= $"[{dataTable.Columns (i).ColumnName}] NVARCHAR(MAX)"
				If i < dataTable.Columns.Count - 1 Then
					createTable &= ", "
				End If
			Next i
			createTable &= ") END"
			Dim createTableCommand As New SqlCommand(checkTable & createTable, connection)
			createTableCommand.ExecuteNonQuery()

			' Now we use SqlBulkCopy to import the data
			Using bulkCopy As New SqlBulkCopy(connection)
				bulkCopy.DestinationTableName = tableName
				Try
					bulkCopy.WriteToServer(dataTable)
					Console.WriteLine("Data imported successfully!")
				Catch ex As Exception
					Console.WriteLine(ex.Message)
				End Try
			End Using
		End Using
	End Sub
End Class
VB   C#

Zunächst wird mit Hilfe der Klasse DatabaseConnector eine Verbindung zur SQL Server-Datenbank hergestellt, um einen Weg für Datentransaktionen zu gewährleisten. Die Methode prüft, ob die Tabelle "CSVData" in der Datenbank vorhanden ist.

Wenn die Tabelle nicht gefunden wird, wird sie erstellt. Das Tabellenschema wird auf der Grundlage des an die Methode übergebenen DataTable-Schemas erstellt, wobei alle Spalten auf NVARCHAR gesetzt werden(MAX)** zur Aufnahme beliebiger Textdaten. Dies ist ein allgemeiner Ansatz, der möglicherweise verfeinert werden muss, um bestimmte Datentypen besser abzubilden.

Danach wird ein SQL-Befehl formuliert und ausgeführt, um entweder die Existenz der Tabelle zu überprüfen oder sie zu erstellen. Dadurch wird sichergestellt, dass der nachfolgende Massenkopiervorgang eine Zieltabelle hat, die zum Einfügen der Daten bereit ist. Wenn die Tabelle fertig ist, wird die Klasse SqlBulkCopy verwendet, um Daten aus der DataTable direkt in die SQL Server-Tabelle zu übertragen. Dieser Vorgang ist für leistungsstarke Massendatenübertragungen ausgelegt und eignet sich daher für die effiziente Verarbeitung großer Datenmengen.

Schritt 4: Das Ganze zusammenfügen

Nachdem wir die vorangegangenen Schritte des Einlesens von CSV-Daten, des Aufbaus einer Datenbankverbindung und der Vorbereitung der Datenübertragung gewissenhaft durchgeführt haben, kommen wir zum letzten und entscheidenden Schritt: der Integration dieser einzelnen Komponenten in einen zusammenhängenden Prozess.

Diese Integration erfolgt in der Main-Methode Ihrer C#-Anwendung, wo alles zusammenkommt und die tatsächliche Ausführung des Datenimports aus der CSV-Datei in die SQL Server-Datenbank ermöglicht.

class Program
{
    static void Main(string [] args)
    {
        string filePath = "path_to_your_csv_file.csv";
        CSVReader reader = new CSVReader();
        DataTable dataTable = reader.ReadCSV(filePath);
        DataImporter importer = new DataImporter();
        importer.ImportData(dataTable);
        Console.WriteLine("Data imported successfully!");
    }
}
class Program
{
    static void Main(string [] args)
    {
        string filePath = "path_to_your_csv_file.csv";
        CSVReader reader = new CSVReader();
        DataTable dataTable = reader.ReadCSV(filePath);
        DataImporter importer = new DataImporter();
        importer.ImportData(dataTable);
        Console.WriteLine("Data imported successfully!");
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim filePath As String = "path_to_your_csv_file.csv"
		Dim reader As New CSVReader()
		Dim dataTable As DataTable = reader.ReadCSV(filePath)
		Dim importer As New DataImporter()
		importer.ImportData(dataTable)
		Console.WriteLine("Data imported successfully!")
	End Sub
End Class
VB   C#

Ersetzen Sie Pfad_zu_Ihrer_csv-Datei.csv durch den Pfad zu Ihrer CSV-Datei.

Durchführung des Projekts

Wenn Sie das Projekt ausführen, sehen Sie die folgende Ausgabe. Die Erfolgsmeldungen zeigen an, dass alle Operationen erfolgreich ausgeführt wurden und die Daten in die Datenbank kopiert wurden.

Data imported successfully!

Nun können Sie SQL Server Management Studio öffnen (SSMS) und prüfen Sie die Tabelle unter der Datenbank. In der Tabelle sehen Sie die folgenden Daten.

Wie man Daten aus einer CSV-Datei liest und in einer C#-Datenbank speichert: Abbildung 1 - Datenbank ausgeben

Schlussfolgerung

Dieses Lernprogramm hat Sie durch den Prozess des Lesens von Daten aus einer CSV-Datei und deren Speicherung in einer SQL Server-Datenbank mit C# geführt. Wenn Sie diese Schritte befolgen und die IronXL-Bibliothek verwenden, können Sie CSV-Daten in Ihren C#-Anwendungen effizient verwalten.

IronXL bietet eine kostenloser Test damit die Nutzer die Funktionen kennenlernen können, bevor sie sich zum Kauf verpflichten. Diese voll funktionsfähige Testversion ermöglicht es potenziellen Benutzern, das Produkt in einer Live-Umgebung ohne Wasserzeichen in der Produktion zu testen und zu bewerten. Wenn Sie sich nach der Testphase entscheiden, IronXL weiterhin für Ihre Projekte zu verwenden, beginnt die Lizenzierung für das Produkt mit $749.

< PREVIOUS
Wie exportiert man Datagridview nach Excel in C#
NÄCHSTES >
Konvertieren einer Excel-Datei in XML in C#

Sind Sie bereit, loszulegen? Version: 2024.10 gerade veröffentlicht

Gratis NuGet-Download Downloads insgesamt: 1,068,832 Lizenzen anzeigen >