DuckDB C# (개발자를 위한 작동 방식)
DuckDB.NET은 DuckDB 네이티브 라이브러리를 위한 .NET 바인딩의 오픈 소스 제공자로, C#과 원활하게 통합되도록 설계되었습니다. 이는 ADO.NET 제공자를 제공하여, .NET 애플리케이션 내에서 DuckDB라는 로우 레벨 바인딩 라이브러리를 쉽게 사용할 수 있도록 합니다. 이 패키지는 C# 환경에서 DuckDB의 강력한 분석 기능을 활용하려는 개발자들에게 이상적입니다.
설치
DuckDB.NET의 설치는 간단합니다. 다음과 같이 .NET CLI를 사용하여 프로젝트에 추가할 수 있습니다:
dotnet add package DuckDB.NET.Data.Full
dotnet add package DuckDB.NET.Data.Full
다른 방법으로, Visual Studio의 NuGet 패키지 관리자를 통해 설치할 수 있습니다.
기본 사용법
설치가 완료되면, C# 애플리케이션 내에서 DuckDB.NET을 사용하여 SQL 쿼리를 실행할 수 있습니다. 다음은 간단한 예입니다.
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
이 예제는 DuckDB.NET을 사용하여 테이블을 생성하고, 데이터를 삽입하고, 데이터를 쿼리하는 방법을 보여줍니다.
출력

데이터 수집
DuckDB.NET은 CSV 및 Parquet 파일을 포함한 다양한 형식의 데이터를 읽는 것을 지원합니다. 여기 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()
DataFrames와의 통합
DuckDB.NET은 데이터 프레임과 통합할 수 있으며, 친숙한 SQL 구문을 사용하여 데이터를 조작할 수 있습니다. 이는 특히 데이터 분석 작업에 유용합니다.
결과 변환
쿼리 결과를 목록이나 사용자 지정 객체와 같은 다양한 형식으로 변환하여, 애플리케이션 내에서 데이터를 쉽게 다룰 수 있게 합니다:
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
디스크에 데이터 쓰기
DuckDB.NET은 다양한 형식으로 디스크에 데이터를 쓰는 것을 지원합니다. COPY 문을 사용하여 데이터를 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()
IronPDF 소개

IronPDF는 .NET 프로젝트에서 PDF 문서의 생성, 관리 및 콘텐츠 추출을 허용하는 C# PDF 라이브러리입니다. 다음은 몇 가지 주요 기능입니다:
IronPDF는 웹페이지, URL, HTML을 PDF로 변환할 수 있는 편리한 도구입니다. 가장 큰 장점은 생성된 PDF가 원본 웹 페이지와 동일하게 보인다는 점입니다. 모든 서식과 스타일이 그대로 유지됩니다. 온라인 보고서나 청구서 등을 PDF로 생성해야 한다면 IronPDF를 활용하시기 바랍니다.
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
-
HTML을 PDF로 변환:
- HTML, CSS 및 JavaScript 콘텐츠를 PDF로 변환합니다.
- 픽셀 완벽한 PDF 문서를 위한 Chrome 렌더링 엔진.
- URL, HTML 파일 또는 HTML 문자열에서 PDF를 생성합니다.
-
이미지 및 콘텐츠 변환:
- 이미지를 PDF 문서로 변환하고 그 반대로도 가능합니다.
- 기존 PDF 문서에서 텍스트와 이미지를 추출합니다.
- JPG, PNG 등 다양한 이미지 형식을 지원합니다.
-
편집 및 조작:
- PDF 문서의 속성, 보안 및 권한을 설정합니다.
- PDF에 디지털 서명을 추가합니다.
- 메타데이터 및 수정 기록을 편집합니다.
- 크로스 플랫폼 지원:
- .NET Core(8, 7, 6, 5, 및 3.1+), .NET Standard(2.0+) 및 .NET Framework(4.6.2+)와 함께 작동합니다.
- Windows, Linux, macOS와 호환됩니다.
- 간편한 설치를 위한 NuGet에서 사용 가능합니다.
IronPDF 및 DuckDB .NET을 사용하여 PDF 문서 생성하기
먼저, 아래와 같이 Visual Studio를 사용하여 콘솔 애플리케이션을 만듭니다.

프로젝트 이름을 제공합니다.

.NET 버전을 제공합니다.

IronPDF 패키지를 설치합니다.

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
코드 설명
이 코드는 DuckDB.NET을 데이터베이스 작업에 사용하고 IronPDF를 사용하여 데이터베이스 쿼리 결과가 포함된 PDF 보고서를 생성하는 방법을 보여주려 합니다.
핵심 구성 요소
-
DuckDB.NET:
- DuckDBConnection: 메모리에 저장된 DuckDB 데이터베이스 파일('Data Source=:memory:')에 연결을 설정합니다. 이 연결은 SQL 명령을 실행하는 데 코드 전반에 사용됩니다.
-
데이터베이스 작업:
- 테이블 생성: SQL 명령(CREATE TABLE integers(book STRING, cost INTEGER);)을 정의하여 book (STRING)과 cost (INTEGER)의 열이 있는 이름이 integers인 테이블을 생성합니다.
- 데이터 삽입: integers 테이블에 행을 삽입합니다 (INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);).
- 데이터 검색: SELECT 쿼리 (SELECT book, cost FROM integers;)를 실행하여 integers 테이블에서 데이터를 가져옵니다. 검색된 데이터는 HTML (content)로 형식화되어 콘솔에 출력됩니다.
- IronPDF를 사용한 PDF 생성:
- HTML을 PDF로 렌더링: IronPDF의 ChromePdfRenderer를 사용하여 HTML 콘텐츠 (content)를 PDF 문서 (pdf)로 변환합니다.
- PDF 저장: 생성된 PDF를 현재 디렉토리에 'AwesomeDuckDbNet.pdf'로 저장합니다.
출력


IronPDF 라이선스
IronPDF 패키지는 실행하기 위해 라이센스가 필요합니다. 패키지에 접근하기 전에 애플리케이션의 시작 부분에 아래 코드를 추가하십시오.
IronPdf.License.LicenseKey = "IRONPDF-KEY";
IronPdf.License.LicenseKey = "IRONPDF-KEY";
Imports IronPdf
IronPdf.License.LicenseKey = "IRONPDF-KEY"
IronPDF의 체험판 라이센스 페이지에서 체험판 라이센스를 사용할 수 있습니다.
결론
DuckDB.NET C# 패키지는 .NET 애플리케이션에 DuckDB의 분석 기능을 통합하기 위한 강력한 도구입니다. 사용의 용이성, 다양한 데이터 형식 지원 및 C#과의 매끄러운 통합은 데이터 중심 애플리케이션에서 작업하는 개발자에게 탁월한 선택입니다. 데이터 분석 도구, ETL 파이프라인 또는 다른 데이터 중심 애플리케이션 구축 여부에 관계없이 DuckDB.NET은 목표를 효율적으로 달성하는 데 도움이 될 수 있습니다.
자주 묻는 질문
C# 애플리케이션에서 DuckDB.NET은 무엇에 사용되나요?
DuckDB.NET은 C# 애플리케이션 내에서 DuckDB 네이티브 라이브러리를 통합하여 개발자에게 ADO.NET 공급자를 통한 강력한 분석 기능을 제공합니다.
C# 프로젝트에 DuckDB.NET을 어떻게 설치할 수 있나요?
.NET CLI 명령 dotnet add package DuckDB.NET.Data.Full을 사용하거나 Visual Studio의 NuGet 패키지 관리자에서 DuckDB.NET을 설치할 수 있습니다.
DuckDB.NET을 사용하여 SQL 쿼리를 어떻게 실행하나요?
DuckDBConnection으로 연결을 설정하고 SQL 명령을 실행하여 테이블을 생성하고 데이터 삽입 및 검색을 수행하여 SQL 쿼리를 실행할 수 있습니다.
DuckDB.NET이 CSV 및 Parquet 파일에서 데이터를 읽는 것을 지원할 수 있나요?
네, DuckDB.NET은 C# 애플리케이션 내에서 이러한 데이터 유형의 원활한 통합 및 조작을 허용하여 CSV 및 Parquet 파일을 포함한 다양한 형식의 데이터 수집을 지원합니다.
C#에서 HTML을 PDF로 변환하는 방법은 무엇인가요?
IronPDF의 RenderHtmlAsPdf 메서드를 사용하여 HTML 문자열을 PDF로 변환할 수 있습니다. 또한 RenderHtmlFileAsPdf 사용하여 HTML 파일을 PDF로 변환할 수도 있습니다.
데이터 집약 프로젝트에서 DuckDB.NET을 사용하는 이점은 무엇인가요?
DuckDB.NET은 강력한 분석 기능을 제공하며 SQL 기반 데이터 조작을 지원하고 C# 애플리케이션과 쉽게 통합되어 데이터 집약적인 프로젝트에 이상적입니다.
DuckDB.NET이 데이터 프레임과 어떻게 통합될 수 있나요?
DuckDB.NET은 데이터 프레임과 통합되어 SQL 기반의 데이터 조작을 가능하게 하며, 이는 복잡한 데이터 분석 작업을 수행하는 데 특히 유용합니다.
DuckDB.NET을 사용하여 데이터를 CSV 파일로 어떻게 내보내나요?
COPY 명령문을 사용하여 데이터를 CSV 파일로 내보낼 수 있습니다. 예를 들어, COPY integers TO 'output.csv' (FORMAT CSV);를 사용하여 테이블 데이터를 CSV 파일로 내보낼 수 있습니다.
IronPDF는 어떤 플랫폼을 지원하나요?
IronPDF는 .NET Core (8, 7, 6, 5 및 3.1+), .NET Standard (2.0+), .NET Framework (4.6.2+)을 지원하며, Windows, Linux, macOS와 호환됩니다.
리포트를 생성하기 위해 DuckDB.NET과 IronPDF를 결합할 수 있나요?
네, DuckDB.NET을 데이터베이스 작업에 사용하고 IronPDF를 PDF 리포트 생성에 결합하여 DuckDB의 데이터베이스 기능과 IronPDF의 PDF 생성 기능을 활용할 수 있습니다.




