Passer au contenu du pied de page
.NET AIDE

DuckDB C# (Comment ça fonctionne pour les développeurs)

DuckDB.NET est un fournisseur open-source de liaisons .NET pour la bibliothèque native DuckDB, conçu pour s'intégrer parfaitement avec C#. Il fournit un fournisseur ADO.NET, facilitant l'utilisation de DuckDB, une bibliothèque de liaisons bas niveau, dans les applications .NET. Ce paquet est idéal pour les développeurs cherchant à exploiter les puissantes capacités analytiques de DuckDB dans un environnement C#.

Installation

L'installation de DuckDB.NET est simple. Vous pouvez l'ajouter à votre projet en utilisant l'interface en ligne de commande .NET :

dotnet add package DuckDB.NET.Data.Full
dotnet add package DuckDB.NET.Data.Full
SHELL

Alternativement, vous pouvez l'installer via le gestionnaire de paquets NuGet dans Visual Studio.

Utilisation de base

Une fois installé, vous pouvez commencer à utiliser DuckDB.NET pour exécuter des requêtes SQL dans votre application C#. Voici un exemple simple :

using System;
using DuckDB.NET.Data;

class Program
{
    static void Main()
    {
        // Create and open a connection to an in-memory DuckDB database
        using var duckdbconnection = new DuckDBConnection("Data Source=:memory:");
        duckdbconnection.Open();

        // Create a command associated with the connection
        using var command = duckdbconnection.CreateCommand();
        // Create a table named 'integers'
        command.CommandText = "CREATE TABLE integers(foo INTEGER, bar INTEGER);";
        command.ExecuteNonQuery();

        // Insert some data into the 'integers' table
        command.CommandText = "INSERT INTO integers VALUES (3, 4), (5, 6), (7, 8);";
        command.ExecuteNonQuery();

        // Retrieve the count of rows in the 'integers' table
        command.CommandText = "SELECT count(*) FROM integers";
        var executeScalar = command.ExecuteScalar();

        // Select all values from the 'integers' table
        command.CommandText = "SELECT foo, bar FROM integers;";

        // Execute the query and process the results
        using var reader = command.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine($"{reader.GetInt32(0)}, {reader.GetInt32(1)}");
        }
    }
}
using System;
using DuckDB.NET.Data;

class Program
{
    static void Main()
    {
        // Create and open a connection to an in-memory DuckDB database
        using var duckdbconnection = new DuckDBConnection("Data Source=:memory:");
        duckdbconnection.Open();

        // Create a command associated with the connection
        using var command = duckdbconnection.CreateCommand();
        // Create a table named 'integers'
        command.CommandText = "CREATE TABLE integers(foo INTEGER, bar INTEGER);";
        command.ExecuteNonQuery();

        // Insert some data into the 'integers' table
        command.CommandText = "INSERT INTO integers VALUES (3, 4), (5, 6), (7, 8);";
        command.ExecuteNonQuery();

        // Retrieve the count of rows in the 'integers' table
        command.CommandText = "SELECT count(*) FROM integers";
        var executeScalar = command.ExecuteScalar();

        // Select all values from the 'integers' table
        command.CommandText = "SELECT foo, bar FROM integers;";

        // Execute the query and process the results
        using var reader = command.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine($"{reader.GetInt32(0)}, {reader.GetInt32(1)}");
        }
    }
}
Imports System
Imports DuckDB.NET.Data

Friend Class Program
	Shared Sub Main()
		' Create and open a connection to an in-memory DuckDB database
		Dim duckdbconnection As New DuckDBConnection("Data Source=:memory:")
		duckdbconnection.Open()

		' Create a command associated with the connection
		Dim command = duckdbconnection.CreateCommand()
		' Create a table named 'integers'
		command.CommandText = "CREATE TABLE integers(foo INTEGER, bar INTEGER);"
		command.ExecuteNonQuery()

		' Insert some data into the 'integers' table
		command.CommandText = "INSERT INTO integers VALUES (3, 4), (5, 6), (7, 8);"
		command.ExecuteNonQuery()

		' Retrieve the count of rows in the 'integers' table
		command.CommandText = "SELECT count(*) FROM integers"
		Dim executeScalar = command.ExecuteScalar()

		' Select all values from the 'integers' table
		command.CommandText = "SELECT foo, bar FROM integers;"

		' Execute the query and process the results
		Dim reader = command.ExecuteReader()
		Do While reader.Read()
			Console.WriteLine($"{reader.GetInt32(0)}, {reader.GetInt32(1)}")
		Loop
	End Sub
End Class
$vbLabelText   $csharpLabel

Cet exemple démontre comment créer une table, insérer des données, et interroger les données en utilisant DuckDB.NET.

Sortie

DuckDB C# (Comment ça fonctionne pour les développeurs) : Figure 1 - Sortie de console DuckDB.NET

Ingestion de données

DuckDB.NET prend en charge la lecture de données à partir de divers formats, y compris les fichiers CSV et Parquet. Voici comment vous pouvez lire des données à partir d'un fichier CSV :

command.CommandText = "COPY integers FROM 'example.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
command.CommandText = "COPY integers FROM 'example.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Intégration avec les DataFrames

DuckDB.NET peut également s'intégrer avec des dataframes, vous permettant de manipuler des données en utilisant une syntaxe SQL familière. Cela est particulièrement utile pour les tâches d'analyse de données.

Conversion des résultats

Vous pouvez convertir les résultats des requêtes en divers formats, tels que des listes ou des objets personnalisés, facilitant le travail avec les données dans votre application :

var results = new List<(int foo, int bar)>();

// Read and store results to a List
while (reader.Read())
{
    results.Add((reader.GetInt32(0), reader.GetInt32(1))); 
    // You can also use a loop with an index to iterate the results
}
var results = new List<(int foo, int bar)>();

// Read and store results to a List
while (reader.Read())
{
    results.Add((reader.GetInt32(0), reader.GetInt32(1))); 
    // You can also use a loop with an index to iterate the results
}
Dim results = New List(Of (foo As Integer, bar As Integer))()

' Read and store results to a List
Do While reader.Read()
	results.Add((reader.GetInt32(0), reader.GetInt32(1)))
	' You can also use a loop with an index to iterate the results
Loop
$vbLabelText   $csharpLabel

Écriture des données sur disque

DuckDB.NET prend en charge l'écriture des données sur disque dans divers formats. Vous pouvez utiliser l'instruction COPY pour exporter des données vers un fichier CSV :

command.CommandText = "COPY integers TO 'output.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
command.CommandText = "COPY integers TO 'output.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Introduction à IronPDF

DuckDB C# (Comment ça fonctionne pour les développeurs) : Figure 2 - IronPDF

IronPDF est une bibliothèque PDF C# qui permet la génération, la gestion et l'extraction de contenu à partir de documents PDF dans des projets .NET. Voici quelques caractéristiques clés :

IronPDF est un outil pratique qui vous permet de transformer des pages web, des URL et HTML en PDF. La meilleure partie ? Les PDFs ressemblent exactement aux pages web originales – en conservant toute la mise en forme et le style. Donc, si vous avez besoin de faire un PDF à partir de quelque chose en ligne, comme un rapport ou une facture, IronPDF est ce qu'il vous faut.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel
  1. Conversion HTML en PDF :

    • Convertissez le contenu HTML, CSS et JavaScript en PDFs.
    • Moteur de rendu Chrome pour des documents PDF au rendu parfait.
    • Générez des PDFs à partir d'URL, de fichiers HTML ou de chaînes HTML.
  2. Conversion d'Images et de Contenu :

    • Convertissez des images vers et depuis des documents PDF.
    • Extrayez le texte et les images de documents PDF existants.
    • Prise en charge de divers formats d'image comme JPG, PNG, etc.
  3. Édition et Manipulation :

    • Définissez les propriétés, la sécurité et les permissions pour les documents PDF.
    • Ajoutez des signatures numériques aux PDFs.
    • Éditez les métadonnées et l'historique des révisions.
  4. Support Multiplateforme :
    • Fonctionne avec .NET Core (8, 7, 6, 5, et 3.1+), .NET Standard (2.0+), et .NET Framework (4.6.2+).
    • Compatible avec Windows, Linux, et macOS.
    • Disponible sur NuGet pour une installation facile.

Générez des documents PDF à l'aide d'IronPDF et DuckDB .NET

Pour commencer, créez une application Console en utilisant Visual Studio comme ci-dessous.

DuckDB C# (Comment ça fonctionne pour les développeurs) : Figure 3 - Application Console

Fournissez le nom du projet.

DuckDB C# (Comment ça fonctionne pour les développeurs) : Figure 4 - Configuration du projet

Fournissez la version de .NET.

DuckDB C# (Comment ça fonctionne pour les développeurs) : Figure 5 - Cadre cible

Installez le paquet IronPDF.

DuckDB C# (Comment ça fonctionne pour les développeurs) : Figure 6 - IronPDF

Installez le paquet DuckDB.NET.

DuckDB C# (Comment ça fonctionne pour les développeurs) : Figure 7 - DuckDB.NET

using DuckDB.NET.Data;
using IronPdf;

namespace CodeSample
{
    public static class DuckDbDemo
    {
        public static void Execute()
        {
            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo DuckDb and IronPDF</h1>";
            content += "<h2>Create DuckDBConnection</h2>";
            content += "<p>new DuckDBConnection(\"Data Source=:memory:\");</p>";
            content += "<p></p>";

            // Create and open a connection to an in-memory DuckDB database
            using var connection = new DuckDBConnection("Data Source=:memory:");
            connection.Open();
            using var command = connection.CreateCommand();

            // Create a table named 'integers'
            command.CommandText = "CREATE TABLE integers(book STRING, cost INTEGER);";
            command.ExecuteNonQuery();
            content += "<p>CREATE TABLE integers(book STRING, cost INTEGER);</p>";

            // Insert some data into the 'integers' table
            command.CommandText = "INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);";
            command.ExecuteNonQuery();
            content += "<p>INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);</p>";

            // Select all values from the 'integers' table
            command.CommandText = "SELECT book, cost FROM integers;";
            using var reader = command.ExecuteReader();
            content += "<p>SELECT book, cost FROM integers;</p>";

            // Execute the query and process the results, appending them to the HTML content
            while (reader.Read())
            {
                content += $"<p>{reader.GetString(0)}, {reader.GetInt32(1)}</p>";
                Console.WriteLine($"{reader.GetString(0)}, {reader.GetInt32(1)}");
            }

            // Save data to CSV
            content += "<p>Save data to CSV with COPY integers TO 'output.csv' (FORMAT CSV);</p>";
            command.CommandText = "COPY integers TO 'output.csv' (FORMAT CSV);";
            command.ExecuteNonQuery();

            // Generate and save PDF
            var pdf = renderer.RenderHtmlAsPdf(content);
            pdf.SaveAs("AwesomeDuckDbNet.pdf");
        }
    }
}
using DuckDB.NET.Data;
using IronPdf;

namespace CodeSample
{
    public static class DuckDbDemo
    {
        public static void Execute()
        {
            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo DuckDb and IronPDF</h1>";
            content += "<h2>Create DuckDBConnection</h2>";
            content += "<p>new DuckDBConnection(\"Data Source=:memory:\");</p>";
            content += "<p></p>";

            // Create and open a connection to an in-memory DuckDB database
            using var connection = new DuckDBConnection("Data Source=:memory:");
            connection.Open();
            using var command = connection.CreateCommand();

            // Create a table named 'integers'
            command.CommandText = "CREATE TABLE integers(book STRING, cost INTEGER);";
            command.ExecuteNonQuery();
            content += "<p>CREATE TABLE integers(book STRING, cost INTEGER);</p>";

            // Insert some data into the 'integers' table
            command.CommandText = "INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);";
            command.ExecuteNonQuery();
            content += "<p>INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);</p>";

            // Select all values from the 'integers' table
            command.CommandText = "SELECT book, cost FROM integers;";
            using var reader = command.ExecuteReader();
            content += "<p>SELECT book, cost FROM integers;</p>";

            // Execute the query and process the results, appending them to the HTML content
            while (reader.Read())
            {
                content += $"<p>{reader.GetString(0)}, {reader.GetInt32(1)}</p>";
                Console.WriteLine($"{reader.GetString(0)}, {reader.GetInt32(1)}");
            }

            // Save data to CSV
            content += "<p>Save data to CSV with COPY integers TO 'output.csv' (FORMAT CSV);</p>";
            command.CommandText = "COPY integers TO 'output.csv' (FORMAT CSV);";
            command.ExecuteNonQuery();

            // Generate and save PDF
            var pdf = renderer.RenderHtmlAsPdf(content);
            pdf.SaveAs("AwesomeDuckDbNet.pdf");
        }
    }
}
Imports DuckDB.NET.Data
Imports IronPdf

Namespace CodeSample
	Public Module DuckDbDemo
		Public Sub Execute()
			' Instantiate Renderer
			Dim renderer = New ChromePdfRenderer()
			Dim content = "<h1>Demo DuckDb and IronPDF</h1>"
			content &= "<h2>Create DuckDBConnection</h2>"
			content &= "<p>new DuckDBConnection(""Data Source=:memory:"");</p>"
			content &= "<p></p>"

			' Create and open a connection to an in-memory DuckDB database
			Dim connection = New DuckDBConnection("Data Source=:memory:")
			connection.Open()
			Dim command = connection.CreateCommand()

			' Create a table named 'integers'
			command.CommandText = "CREATE TABLE integers(book STRING, cost INTEGER);"
			command.ExecuteNonQuery()
			content &= "<p>CREATE TABLE integers(book STRING, cost INTEGER);</p>"

			' Insert some data into the 'integers' table
			command.CommandText = "INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);"
			command.ExecuteNonQuery()
			content &= "<p>INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);</p>"

			' Select all values from the 'integers' table
			command.CommandText = "SELECT book, cost FROM integers;"
			Dim reader = command.ExecuteReader()
			content &= "<p>SELECT book, cost FROM integers;</p>"

			' Execute the query and process the results, appending them to the HTML content
			Do While reader.Read()
				content &= $"<p>{reader.GetString(0)}, {reader.GetInt32(1)}</p>"
				Console.WriteLine($"{reader.GetString(0)}, {reader.GetInt32(1)}")
			Loop

			' Save data to CSV
			content &= "<p>Save data to CSV with COPY integers TO 'output.csv' (FORMAT CSV);</p>"
			command.CommandText = "COPY integers TO 'output.csv' (FORMAT CSV);"
			command.ExecuteNonQuery()

			' Generate and save PDF
			Dim pdf = renderer.RenderHtmlAsPdf(content)
			pdf.SaveAs("AwesomeDuckDbNet.pdf")
		End Sub
	End Module
End Namespace
$vbLabelText   $csharpLabel

Explication du Code

Le code vise à montrer comment utiliser DuckDB.NET pour les opérations de base de données et IronPDF pour générer un rapport PDF contenant les résultats des requêtes de base de données.

Composants clés

  1. DuckDB.NET :

    • DuckDBConnection : Établit une connexion à un fichier de base de données DuckDB en mémoire ("Data Source=:memory:"). Cette connexion est utilisée tout au long du code pour exécuter des commandes SQL.
  2. Opérations de base de données :

    • Création de table : Définit une commande SQL (CREATE TABLE integers(book STRING, cost INTEGER);) pour créer une table nommée integers avec des colonnes book (STRING) et cost (INTEGER).
    • Insertion de données : Insère des lignes dans la table integers (INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);).
    • Récupération de données : Exécute une requête SELECT (SELECT book, cost FROM integers;) pour récupérer des données de la table integers. Les données récupérées sont formatées en HTML (content) et imprimées dans la console.
  3. Génération de PDF avec IronPDF :
    • Rendu de HTML en PDF : Utilise ChromePdfRenderer d'IronPDF pour convertir le contenu HTML (content) en un document PDF (pdf).
    • Enregistrement du PDF : Enregistre le PDF généré sous le nom "AwesomeDuckDbNet.pdf" dans le répertoire actuel.

Sortie

DuckDB C# (Comment ça fonctionne pour les développeurs) : Figure 8 - Sortie console

PDF

DuckDB C# (Comment ça fonctionne pour les développeurs) : Figure 9 - Sortie PDF

Licences IronPDF

Le paquet IronPDF nécessite une licence pour fonctionner. Ajoutez le code ci-dessous au début de l'application avant que le paquet ne soit accédé.

IronPdf.License.LicenseKey = "IRONPDF-KEY";
IronPdf.License.LicenseKey = "IRONPDF-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Une licence d'essai est disponible sur la page de licence d'essai d'IronPDF.

Conclusion

Le paquet DuckDB.NET C# est un outil puissant pour intégrer les capacités analytiques de DuckDB dans les applications .NET. Sa facilité d'utilisation, sa prise en charge de divers formats de données, et son intégration transparente avec C# en font un excellent choix pour les développeurs travaillant sur des applications intensives en données. Que vous construisiez des outils d'analyse de données, des pipelines ETL, ou d'autres applications axées sur les données, DuckDB.NET peut vous aider à atteindre vos objectifs efficacement.

Questions Fréquemment Posées

À quoi sert DuckDB.NET dans les applications C# ?

DuckDB.NET est utilisé pour intégrer la bibliothèque native DuckDB dans les applications C#, offrant aux développeurs de puissantes capacités analytiques grâce à un fournisseur ADO.NET.

Comment puis-je installer DuckDB.NET dans un projet C# ?

Vous pouvez installer DuckDB.NET en utilisant la commande .NET CLI dotnet add package DuckDB.NET.Data.Full ou via le gestionnaire de package NuGet dans Visual Studio.

Comment exécuter des requêtes SQL avec DuckDB.NET ?

Vous pouvez exécuter des requêtes SQL avec DuckDB.NET en établissant une connexion avec DuckDBConnection et en exécutant des commandes SQL pour créer des tables, insérer et récupérer des données.

DuckDB.NET peut-il lire des données à partir de fichiers CSV et Parquet ?

Oui, DuckDB.NET prend en charge l'ingestion de données à partir de divers formats, y compris les fichiers CSV et Parquet, permettant une intégration et une manipulation transparentes de ces types de données dans les applications C#.

Comment puis-je convertir HTML en PDF en C# ?

Vous pouvez utiliser la méthode RenderHtmlAsPdf d'IronPDF pour convertir des chaînes HTML en PDFs. Vous pouvez également convertir des fichiers HTML en PDFs en utilisant RenderHtmlFileAsPdf.

Quels sont les avantages de l'utilisation de DuckDB.NET pour des projets intensifs en données ?

DuckDB.NET offre de puissantes capacités analytiques, prend en charge la manipulation de données basée sur SQL et s'intègre facilement avec les applications C#, ce qui le rend idéal pour les projets intensifs en données.

Comment DuckDB.NET peut-il être intégré aux data frames ?

DuckDB.NET peut s'intégrer aux data frames, permettant une manipulation de données basée sur SQL, ce qui est particulièrement utile pour effectuer des tâches d'analyse de données complexes.

Comment exporter des données vers un fichier CSV en utilisant DuckDB.NET ?

Vous pouvez exporter des données vers un fichier CSV avec DuckDB.NET en utilisant l'instruction COPY. Par exemple, utilisez COPY integers TO 'output.csv' (FORMAT CSV); pour exporter des données de table vers un fichier CSV.

Quelles plateformes IronPDF prend-il en charge ?

IronPDF prend en charge .NET Core (8, 7, 6, 5 et 3.1+), .NET Standard (2.0+) et .NET Framework (4.6.2+), et est compatible avec Windows, Linux et macOS.

Puis-je combiner DuckDB.NET et IronPDF pour générer des rapports ?

Oui, vous pouvez combiner DuckDB.NET pour les opérations de base de données et IronPDF pour générer des rapports PDF, en tirant parti des capacités de base de données de DuckDB avec les fonctionnalités de génération de PDF d'IronPDF.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite