Saltar al pie de página
.NET AYUDA

DuckDB C# (Cómo Funciona para Desarrolladores)

DuckDB.NET es un proveedor de código abierto de enlaces .NET para la biblioteca nativa de DuckDB, diseñado para integrarse perfectamente con C#. Proporciona un proveedor ADO.NET, lo que facilita el uso de DuckDB, una biblioteca de enlaces de bajo nivel, dentro de aplicaciones .NET. Este paquete es ideal para desarrolladores que buscan aprovechar las potentes capacidades analíticas de DuckDB en un entorno C#.

Instalación

Instalar DuckDB.NET es sencillo. Puedes agregarlo a tu proyecto usando el CLI de .NET:

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

Alternativamente, puedes instalarlo a través del Administrador de Paquetes NuGet en Visual Studio.

Uso básico

Una vez instalado, puedes comenzar a usar DuckDB.NET para ejecutar consultas SQL dentro de tu aplicación C#. Aquí tienes un ejemplo 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)}");
        }
    }
}
$vbLabelText   $csharpLabel

Este ejemplo demuestra cómo crear una tabla, insertar datos y consultar los datos usando DuckDB.NET.

Resultado

DuckDB C# (Cómo Funciona para Desarrolladores): Figura 1 - Salida de Consola de DuckDB.NET

Ingesta de datos

DuckDB.NET soporta la lectura de datos desde varios formatos, incluidos archivos CSV y Parquet. Aquí tienes cómo puedes leer datos de un archivo CSV:

command.CommandText = "COPY integers FROM 'example.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
command.CommandText = "COPY integers FROM 'example.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
$vbLabelText   $csharpLabel

Integración con DataFrames

DuckDB.NET también puede integrarse con marcos de datos, permitiéndote manipular datos usando una sintaxis SQL familiar. Esto es particularmente útil para tareas de análisis de datos.

Conversión de resultados

Puedes convertir los resultados de las consultas a varios formatos, como listas u objetos personalizados, facilitando el trabajo con los datos en tu aplicación:

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

Escribir datos en disco

DuckDB.NET soporta escribir datos en disco en varios formatos. Puedes usar la instrucción COPY para exportar datos a un archivo CSV:

command.CommandText = "COPY integers TO 'output.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
command.CommandText = "COPY integers TO 'output.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
$vbLabelText   $csharpLabel

Introducción a IronPDF

DuckDB C# (Cómo Funciona para Desarrolladores): Figura 2 - IronPDF

IronPDF es una biblioteca PDF para C# que permite la generación, manejo y extracción de contenido de documentos PDF en proyectos .NET. Aquí algunas características clave:

IronPDF es una herramienta útil que te permite convertir páginas web, URLs y HTML a PDF. ¿La mejor parte? Los PDFs se ven exactamente como las páginas web originales, manteniendo toda la configuración y estilo. Entonces, si necesitas hacer un PDF de algo en línea, como un informe o una factura, IronPDF es tu opción.

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");
    }
}
$vbLabelText   $csharpLabel
  1. Conversión de HTML a PDF:

    • Convierte contenido HTML, CSS y JavaScript a PDFs.
    • Motor de Renderizado de Chrome para documentos PDF con precisión de píxeles.
    • Genera PDFs desde URLs, archivos HTML o cadenas HTML.
  2. Conversión de imágenes y contenidos:

    • Convierte imágenes hacia y desde documentos PDF.
    • Extrae texto e imágenes de documentos PDF existentes.
    • Soporte para varios formatos de imagen como JPG, PNG, etc.
  3. Edición y manipulación:

    • Establece propiedades, seguridad y permisos para documentos PDF.
    • Añade firmas digitales a PDFs.
    • Edita metadatos e historial de revisiones.
  4. Compatibilidad multiplataforma:
    • Funciona con .NET Core (8, 7, 6, 5 y 3.1+), .NET Standard (2.0+) y .NET Framework (4.6.2+).
    • Compatible con Windows, Linux y macOS.
    • Disponible en NuGet para una fácil instalación.

Generar documentos PDF con IronPDF y DuckDB .NET

Para comenzar, crea una aplicación de consola usando Visual Studio como se muestra a continuación.

DuckDB C# (Cómo Funciona para Desarrolladores): Figura 3 - Aplicación de Consola

Proporciona el nombre del Proyecto.

DuckDB C# (Cómo Funciona para Desarrolladores): Figura 4 - Configuración del Proyecto

Proporcione la Versión .NET.

DuckDB C# (Cómo Funciona para Desarrolladores): Figura 5 - Framework Objetivo

Instala el paquete IronPDF.

DuckDB C# (Cómo Funciona para Desarrolladores): Figura 6 - IronPDF

Instala el paquete DuckDB.NET.

DuckDB C# (Cómo Funciona para Desarrolladores): Figura 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");
        }
    }
}
$vbLabelText   $csharpLabel

Explicación del código

El objetivo del código es mostrar cómo usar DuckDB.NET para operaciones de base de datos e IronPDF para generar un informe en PDF que contenga los resultados de las consultas a la base de datos.

Componentes clave

  1. DuckDB.NET:

    • DuckDBConnection: establece una conexión a un archivo de base de datos DuckDB en memoria ("Data Source=:memory:"). Esta conexión se utiliza a lo largo del código para ejecutar comandos SQL.
  2. Operaciones de base de datos:

    • Creación de tabla: define un comando SQL (CREATE TABLE integers(book STRING, cost INTEGER);) para crear una tabla llamada integers con columnas book (STRING) y cost (INTEGER).
    • Inserción de datos: inserta filas en la tabla de enteros (INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);).
    • Recuperación de datos: ejecuta una consulta SELECT (SELECT book, cost FROM integers;) para obtener datos de la tabla de enteros. Los datos recuperados se formatean en HTML (content) y se imprimen en la consola.
  3. Generación de PDF con IronPDF:
    • Representación de HTML a PDF: utiliza ChromePdfRenderer de IronPDF para convertir el contenido HTML (contenido) en un documento PDF (pdf).
    • Guardar PDF: guarda el PDF generado como "AwesomeDuckDbNet.pdf" en el directorio actual.

Resultado

DuckDB C# (Cómo Funciona para Desarrolladores): Figura 8 - Salida de Consola

PDF

DuckDB C# (Cómo Funciona para Desarrolladores): Figura 9 - Salida PDF

Licencias de IronPDF

El paquete IronPDF requiere una licencia para ejecutar. Agrega el siguiente código al inicio de la aplicación antes de que se acceda al paquete.

IronPdf.License.LicenseKey = "IRONPDF-KEY";
IronPdf.License.LicenseKey = "IRONPDF-KEY";
$vbLabelText   $csharpLabel

Una licencia de prueba está disponible en la página de licencia de prueba de IronPDF.

Conclusión

El paquete DuckDB.NET C# es una herramienta poderosa para integrar las capacidades analíticas de DuckDB en aplicaciones .NET. Su facilidad de uso, soporte para varios formatos de datos e integración perfecta con C# lo hacen una excelente opción para desarrolladores que trabajan en aplicaciones intensivas de datos. Ya sea que estés construyendo herramientas de análisis de datos, canalizaciones ETL u otras aplicaciones impulsadas por datos, DuckDB.NET puede ayudarte a lograr tus objetivos de manera eficiente.

Preguntas Frecuentes

¿Para qué se usa DuckDB.NET en aplicaciones C#?

DuckDB.NET se utiliza para integrar la biblioteca nativa de DuckDB dentro de aplicaciones C#, proporcionando a los desarrolladores capacidades analíticas potentes a través de un proveedor ADO.NET.

¿Cómo puedo instalar DuckDB.NET en un proyecto C#?

Puedes instalar DuckDB.NET usando el comando de la CLI de .NET dotnet add package DuckDB.NET.Data.Full o a través del Administrador de Paquetes NuGet en Visual Studio.

¿Cómo ejecuto consultas SQL usando DuckDB.NET?

Puedes ejecutar consultas SQL usando DuckDB.NET estableciendo una conexión con DuckDBConnection y ejecutando comandos SQL para crear tablas, insertar y recuperar datos.

¿Puede DuckDB.NET admitir la lectura de datos de archivos CSV y Parquet?

Sí, DuckDB.NET admite la ingesta de datos desde varios formatos, incluidos los archivos CSV y Parquet, permitiendo la integración perfecta y manipulación de estos tipos de datos dentro de aplicaciones C#.

¿Cómo puedo convertir HTML a PDF en C#?

Puedes usar el método RenderHtmlAsPdf de IronPDF para convertir cadenas de HTML en PDFs. También puedes convertir archivos HTML a PDFs usando RenderHtmlFileAsPdf.

¿Cuáles son los beneficios de usar DuckDB.NET para proyectos intensivos en datos?

DuckDB.NET ofrece capacidades analíticas potentes, admite manipulación de datos basada en SQL y se integra fácilmente con aplicaciones C#, haciéndolo ideal para proyectos intensivos en datos.

¿Cómo se puede integrar DuckDB.NET con marcos de datos?

DuckDB.NET se puede integrar con marcos de datos, permitiendo la manipulación de datos basada en SQL, lo cual es particularmente útil para realizar tareas complejas de análisis de datos.

¿Cómo exporto datos a un archivo CSV usando DuckDB.NET?

Puedes exportar datos a un archivo CSV usando DuckDB.NET con la instrucción COPY. Por ejemplo, usa COPY integers TO 'output.csv' (FORMAT CSV); para exportar datos de tabla a un archivo CSV.

¿Qué plataformas soporta IronPDF?

IronPDF es compatible con .NET Core (8, 7, 6, 5, y 3.1+), .NET Standard (2.0+), y .NET Framework (4.6.2+), y es compatible con Windows, Linux y macOS.

¿Puedo combinar DuckDB.NET e IronPDF para generar informes?

Sí, puedes combinar DuckDB.NET para operaciones de bases de datos e IronPDF para generar informes en PDF, aprovechando las capacidades de bases de datos de DuckDB con las funciones de generación de PDF de IronPDF.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología en Iron Software y un ingeniero visionario que lidera la tecnología PDF en C#. Como el desarrollador original detrás de la base de código central de Iron Software, ha moldeado la arquitectura de productos de la compañía desde ...

Leer más