DuckDB em C# (Como funciona para desenvolvedores)
DuckDB .NET é um provedor de código aberto de bindings .NET para a biblioteca nativa DuckDB, projetado para se integrar perfeitamente com C#. Ele fornece um provedor ADO .NET , facilitando o uso do DuckDB, uma biblioteca de vinculação de baixo nível, em aplicativos .NET . Este pacote é ideal para desenvolvedores que desejam aproveitar os poderosos recursos analíticos do DuckDB em um ambiente C#.
Instalação
A instalação do DuckDB .NET é simples. Você pode adicioná-lo ao seu projeto usando a CLI do .NET :
dotnet add package DuckDB.NET.Data.Full
dotnet add package DuckDB.NET.Data.Full
Alternativamente, você pode instalá-lo através do Gerenciador de Pacotes NuGet no Visual Studio.
Uso básico
Após a instalação, você poderá começar a usar o DuckDB .NET para executar consultas SQL em sua aplicação C#. Eis um exemplo simples:
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
Este exemplo demonstra como criar uma tabela, inserir dados e consultar os dados usando o DuckDB .NET.
Saída

Ingestão de dados
O DuckDB .NET suporta a leitura de dados em vários formatos, incluindo arquivos CSV e Parquet. Veja como você pode ler dados de um arquivo CSV:
command.CommandText = "COPY integers FROM 'example.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
command.CommandText = "COPY integers FROM 'example.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
command.CommandText = "COPY integers FROM 'example.csv' (FORMAT CSV)"
command.ExecuteNonQuery()
Integração com DataFrames
O DuckDB .NET também pode ser integrado a data frames, permitindo manipular dados usando a sintaxe SQL familiar. Isso é particularmente útil para tarefas de análise de dados.
Conversão de resultados
Você pode converter os resultados da consulta em vários formatos, como listas ou objetos personalizados, facilitando o trabalho com os dados em seu aplicativo:
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
Gravando dados em disco
O DuckDB .NET suporta a gravação de dados em disco em vários formatos. Você pode usar a instrução COPY para exportar dados para um arquivo CSV:
command.CommandText = "COPY integers TO 'output.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
command.CommandText = "COPY integers TO 'output.csv' (FORMAT CSV);";
command.ExecuteNonQuery();
command.CommandText = "COPY integers TO 'output.csv' (FORMAT CSV)"
command.ExecuteNonQuery()
Introdução ao IronPDF

IronPDF é uma biblioteca C# para PDF que permite a geração, o gerenciamento e a extração de conteúdo de documentos PDF em projetos .NET . Aqui estão algumas características principais:
O IronPDF é uma ferramenta prática que permite converter páginas da web, URLs e HTML em PDF . A melhor parte? Os PDFs são exatamente iguais às páginas da web originais, mantendo toda a formatação e o estilo. Portanto, se você precisar criar um PDF a partir de algo online, como um relatório ou uma fatura, o IronPDF é a solução ideal.
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
-
Conversão de HTML para PDF:
- Converter conteúdo HTML, CSS e JavaScript em PDFs.
- Mecanismo de renderização do Chrome para documentos PDF com qualidade de imagem perfeita.
- Gere PDFs a partir de URLs, arquivos HTML ou strings HTML.
-
Conversão de imagem e conteúdo:
- Converter imagens de e para documentos PDF.
- Extrair texto e imagens de documentos PDF existentes.
- Suporte para diversos formatos de imagem, como JPG, PNG, etc.
-
Edição e Manipulação:
- Defina propriedades, segurança e permissões para documentos PDF.
- Adicione assinaturas digitais a PDFs.
- Editar metadados e histórico de revisões.
- Suporte multiplataforma:
- Funciona com .NET Core (8, 7, 6, 5 e 3.1+), .NET Standard (2.0+) e .NET Framework (4.6.2+).
- Compatível com Windows, Linux e macOS.
- Disponível no NuGet para fácil instalação.
Gere documentos PDF usando IronPDF e DuckDB .NET.
Para começar, crie um aplicativo de console usando o Visual Studio, conforme mostrado abaixo.

Forneça o nome do projeto.

Informe a versão do .NET .

Instale o pacote IronPDF .

Instale o pacote 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
Explicação do código
O código tem como objetivo demonstrar como usar o DuckDB .NET para operações de banco de dados e o IronPDF para gerar um relatório em PDF contendo os resultados da consulta ao banco de dados.
Componentes principais
-
DuckDB .NET:
- DuckDBConnection: Estabelece uma conexão com um arquivo de banco de dados DuckDB em memória ("Data Source=:memory:"). Essa conexão é usada em todo o código para executar comandos SQL.
-
Operações de banco de dados:
- Criação de tabela: Define um comando SQL (CREATE TABLE integers(book STRING, cost INTEGER);) para criar uma tabela chamada integers com as colunas book (STRING) e cost (INTEGER).
- Inserção de dados: Insere linhas na tabela integers (INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);).
- Recuperação de dados: Executa uma consulta SELECT (SELECT book, cost FROM integers;) para buscar dados da tabela integers. Os dados recuperados são formatados em HTML (conteúdo) e impressos no console.
- Geração de PDF com IronPDF:
- Renderização de HTML para PDF: Utiliza o ChromePdfRenderer do IronPDF para converter o conteúdo HTML (content) em um documento PDF (pdf).
- Salvar PDF: Salva o PDF gerado como "AwesomeDuckDbNet.pdf" no diretório atual.
Saída


Licenciamento IronPDF
O pacote IronPDF requer uma licença para funcionar. Adicione o código abaixo no início da aplicação, antes que o pacote seja acessado.
IronPdf.License.LicenseKey = "IRONPDF-KEY";
IronPdf.License.LicenseKey = "IRONPDF-KEY";
Imports IronPdf
IronPdf.License.LicenseKey = "IRONPDF-KEY"
Uma licença de avaliação está disponível na página de licenças de avaliação do IronPDF .
Conclusão
O pacote DuckDB .NET C# é uma ferramenta poderosa para integrar os recursos analíticos do DuckDB em aplicativos .NET . Sua facilidade de uso, suporte a diversos formatos de dados e integração perfeita com C# fazem dele uma excelente escolha para desenvolvedores que trabalham com aplicações que exigem grande volume de dados. Seja para criar ferramentas de análise de dados, pipelines ETL ou outros aplicativos orientados a dados, o DuckDB .NET pode ajudá-lo a atingir seus objetivos com eficiência.
Perguntas frequentes
Para que serve o DuckDB.NET em aplicações C#?
O DuckDB.NET é usado para integrar a biblioteca nativa DuckDB em aplicativos C#, fornecendo aos desenvolvedores poderosos recursos analíticos por meio de um provedor ADO.NET.
Como posso instalar o DuckDB.NET em um projeto C#?
Você pode instalar o DuckDB.NET usando o comando da CLI do .NET dotnet add package DuckDB.NET.Data.Full ou através do Gerenciador de Pacotes NuGet no Visual Studio.
Como faço para executar consultas SQL usando o DuckDB.NET?
Você pode executar consultas SQL usando o DuckDB.NET estabelecendo uma conexão com DuckDBConnection e executando comandos SQL para criar tabelas, inserir e recuperar dados.
O DuckDB.NET suporta a leitura de dados de arquivos CSV e Parquet?
Sim, o DuckDB.NET suporta a ingestão de dados de vários formatos, incluindo arquivos CSV e Parquet, permitindo a integração e manipulação perfeitas desses tipos de dados em aplicativos C#.
Como posso converter HTML para PDF em C#?
Você pode usar o método RenderHtmlAsPdf do IronPDF para converter strings HTML em PDFs. Você também pode converter arquivos HTML em PDFs usando o RenderHtmlFileAsPdf .
Quais são os benefícios de usar o DuckDB.NET para projetos com uso intensivo de dados?
O DuckDB.NET oferece recursos analíticos poderosos, suporta manipulação de dados baseada em SQL e se integra facilmente a aplicativos C#, tornando-o ideal para projetos com grande volume de dados.
Como o DuckDB.NET pode ser integrado com data frames?
O DuckDB.NET pode ser integrado a data frames, permitindo a manipulação de dados baseada em SQL, o que é particularmente útil para a execução de tarefas complexas de análise de dados.
Como faço para exportar dados para um arquivo CSV usando o DuckDB.NET?
Você pode exportar dados para um arquivo CSV usando o DuckDB.NET com a instrução COPY . Por exemplo, use COPY integers TO 'output.csv' (FORMAT CSV); para exportar dados de tabela para um arquivo CSV.
Quais plataformas o IronPDF suporta?
O IronPDF é compatível com .NET Core (8, 7, 6, 5 e 3.1+), .NET Standard (2.0+) e .NET Framework (4.6.2+) e com Windows, Linux e macOS.
Posso combinar DuckDB.NET e IronPDF para gerar relatórios?
Sim, você pode combinar o DuckDB.NET para operações de banco de dados e o IronPDF para gerar relatórios em PDF, aproveitando os recursos de banco de dados do DuckDB com os recursos de geração de PDF do IronPDF.




