跳過到頁腳內容
.NET幫助

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
SHELL

另外,您也可以透過 Visual Studio 中的 NuGet Package Manager 進行安裝。

基本用法

安裝完成後,您就可以開始使用 DuckDB.NET 在您的 C# 應用程式中執行 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
$vbLabelText   $csharpLabel

本範例示範如何使用 DuckDB.NET 建立資料表、插入資料和查詢資料。

輸出

DuckDB C# (How It Works For Developers):圖 1 - DuckDB.NET 控制台輸出

Data Ingestion

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();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

將資料寫入磁碟

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();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF 簡介

DuckDB C# (How It Works For Developers):圖 2 - IronPdf

IronPDF 是一個 C# PDF 函式庫,允許在 .NET 專案中產生、管理和擷取 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
$vbLabelText   $csharpLabel

1.HTML 至 PDF 轉換

  • 將 HTML、CSS 及 JavaScript 內容轉換為 PDF。
  • Chrome Rendering Engine 可提供像素完美的 PDF 文件。
  • 從 URL、HTML 檔案或 HTML 字串產生 PDF。

2.圖片與內容轉換

  • 將圖片轉換為 PDF 文件或從 PDF 文件轉換為圖片。
  • 從現有的 PDF 文件中萃取文字和圖片。
  • 支援 JPG、PNG 等多種圖片格式。

3.編輯與操作

  • 為 PDF 文件設定屬性、安全性和權限。
  • 在 PDF 中加入數位簽名。
  • 編輯元資料和修訂歷史。

4.跨平台支援

  • 適用於 .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 建立一個 Console 應用程式,如下所示。

DuckDB C# (How It Works For Developers):圖 3 - 主控台應用程式

提供專案名稱。

DuckDB C# (How It Works For Developers):圖 4 - 專案組態

提供 .NET 版本。

DuckDB C# (How It Works For Developers):圖 5 - 目標框架

安裝 IronPdf 套件。

DuckDB C# (How It Works For Developers):圖 6 - IronPdf

安裝 DuckDB.NET 套件。

DuckDB C# (How It Works For Developers):圖 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

程式碼解釋

該代碼旨在展示如何使用 DuckDB.NET 進行資料庫操作,以及如何使用 IronPDF 生成包含資料庫查詢結果的 PDF 報告。

主要元件

1.DuckDB.NET

  • DuckDBConnection:建立與記憶體內 DuckDB 資料庫檔案 ("資料來源=:記憶體:") 的連線。 整個程式碼中都會使用此連線來執行 SQL 指令。

2.資料庫作業

  • 表格建立:定義 SQL 指令 (CREATE TABLE integers(book STRING, cost INTEGER);),以建立一個名為 integers 的資料表,其列為 book (STRING) 和 cost (INTEGER)。
  • 資料插入:將行插入整數表 (INSERT INTO integers VALUES ('book1', 25), ('book2', 30), ('book3', 10);).
  • 資料擷取:執行 SELECT 查詢 (SELECT book, cost FROM integers;),從整數資料表擷取資料。 擷取的資料會格式化為 HTML (內容),並列印至控制台。

3.使用 IronPDF 生成 PDF

  • Rendering HTML to PDF:使用 IronPDF 的 ChromePdfRenderer 將 HTML 內容 (content) 轉換成 PDF 文件 (pdf)。
  • 儲存 PDF:將生成的 PDF 檔案儲存為目前目錄中的 "AwesomeDuckDbNet.pdf"。

輸出

DuckDB C# (How It Works For Developers):圖 8 - 控制台輸出

PDF。

DuckDB C# (How It Works For Developers):圖 9 - PDF 輸出

IronPDF 授權。

IronPdf 套件需要授權才能執行。 在存取套件之前,在應用程式的開頭加入以下程式碼。

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

IronPDF的試用授權頁面提供試用授權。

結論

DuckDB.NET C# 套件是將 DuckDB 的分析功能整合至 .NET 應用程式的強大工具。 其易用性、對各種資料格式的支援,以及與 C# 的無縫整合,使其成為開發資料密集應用程式的開發人員的絕佳選擇。 無論您是要建立資料分析工具、ETL 管道或其他資料驅動的應用程式,DuckDB.NET 都能幫助您有效率地達成目標。

常見問題解答

DuckDB.NET 在 C# 應用程式中用來做什麼?

DuckDB.NET 用於在 C# 應用程式中整合 DuckDB 原生函式庫,透過 ADO.NET 提供者為開發人員提供強大的分析功能。

如何在 C# 專案中安裝 DuckDB.NET?

您可以使用 .NET CLI 指令 dotnet add package DuckDB.NET.Data.Full 或透過 Visual Studio 中的 NuGet Package Manager 安裝 DuckDB.NET。

如何使用 DuckDB.NET 執行 SQL 查詢?

您可以使用 DuckDB.NET 執行 SQL 查詢,方法是使用 DuckDBConnection 建立連線,並執行 SQL 指令來建立資料表、插入和擷取資料。

DuckDB.NET 是否支援從 CSV 和 Parquet 檔案讀取資料?

是的,DuckDB.NET 支援各種格式的資料擷取,包括 CSV 和 Parquet 檔案,允許在 C# 應用程式中無縫整合和處理這些資料類型。

如何在 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 語句使用 DuckDB.NET 將資料匯出至 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 和用於產生 PDF 報告的 IronPDF 結合起來,充分利用 DuckDB 的資料庫功能和 IronPDF 的 PDF 產生功能。

Jacob Mellor, Team Iron 首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技術官,作為 C# PDF 技術的先鋒工程師。作為 Iron Software 核心代碼的原作者,他自開始以來塑造了公司產品架構,與 CEO Cameron Rimington 一起將其轉變為一家擁有超過 50 名員工的公司,為 NASA、特斯拉 和 全世界政府機構服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽学士工程學位(BEng) (1998-2001)。他於 1999 年在倫敦開設了他的第一家軟件公司,並於 2005 年製作了他的首個 .NET 組件,專注於解決 Microsoft 生態系統內的複雜問題。

他的旗艦產品 IronPDF & Iron Suite .NET 庫在全球 NuGet 被安裝超過 3000 萬次,其基礎代碼繼續為世界各地的開發工具提供動力。擁有 25 年的商業經驗和 41 年的編碼專業知識,Jacob 仍專注於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領袖。