DuckDB.NET.Data.Full 1.5.0
DuckDB.NET
DuckDB bindings for C#

Usage
dotnet add package DuckDB.NET.Data.Full
using (var duckDBConnection = new DuckDBConnection("Data Source=file.db"))
{
duckDBConnection.Open();
using var command = duckDBConnection.CreateCommand();
command.CommandText = "CREATE TABLE integers(foo INTEGER, bar INTEGER);";
var executeNonQuery = command.ExecuteNonQuery();
command.CommandText = "INSERT INTO integers VALUES (3, 4), (5, 6), (7, 8);";
executeNonQuery = command.ExecuteNonQuery();
command.CommandText = "Select count(*) from integers";
var executeScalar = command.ExecuteScalar();
command.CommandText = "SELECT foo, bar FROM integers";
var reader = command.ExecuteReader();
PrintQueryResults(reader);
}
private static void PrintQueryResults(DbDataReader queryResult)
{
for (var index = 0; index < queryResult.FieldCount; index++)
{
var column = queryResult.GetName(index);
Console.Write($"{column} ");
}
Console.WriteLine();
while (queryResult.Read())
{
for (int ordinal = 0; ordinal < queryResult.FieldCount; ordinal++)
{
var val = queryResult.GetInt32(ordinal);
Console.Write(val);
Console.Write(" ");
}
Console.WriteLine();
}
}
MotherDuck
To connect to MotherDuck:
using var duckDBConnection = new DuckDBConnection("DataSource=md:{your_database}?motherduck_token=ey...");
DuckDB Extensions (C#)
If you want to build DuckDB extensions with C#, see Giorgi/DuckDB.ExtensionKit.
Known Issues
When debugging your project that uses DuckDB.NET library, you may get the following error: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. The error happens due to debugger interaction with the native memory. For a workaround check out Debugger Options mess up debugging session during Marshalling
Documentation
Documentation is available at https://duckdb.net
Support
If you encounter a bug with the library Create an Issue. Join the DuckDB dotnet channel for DuckDB.NET-related topics.
Contributors
Sponsors
A big thanks to DuckDB Labs and AWS Open Source Software Fund for sponsoring the project!
No packages depend on DuckDB.NET.Data.Full.
- Updated to DuckDB v1.5.0
- Dropped netstandard2.0 and net6.0 (now targets net8.0+)
New features:
- High-level scalar function API
- High-level table function API
- Named parameters for table functions via [Named] attribute
- NULL handling for scalar functions inferred from nullable parameter types (int?, string?)
- Appender Clear() method to discard in-progress rows
Performance:
- Reuse vector readers across chunks instead of recreating per chunk
- Migrated from DllImport to LibraryImport with source-generated P/Invoke
- Cache enum dictionary lookups in EnumVectorDataReader
- Expression tree-based nullable GetValue
to avoid boxing - SuppressGCTransition on trivial native calls
- AggressiveInlining on hot-path methods
- Appender value writes split by struct/class to avoid boxing
| Version | Downloads | Last updated |
|---|---|---|
| 1.5.0 | 93 | 04/01/2026 |
| 1.4.4 | 0 | 02/03/2026 |
| 1.4.4-alpha.2 | 2 | 04/04/2026 |
| 1.4.3 | 1 | 04/04/2026 |
| 1.4.1 | 1 | 04/04/2026 |
| 1.3.2 | 1 | 04/04/2026 |
| 1.3.0 | 1 | 04/04/2026 |
| 1.2.1 | 1 | 04/04/2026 |
| 1.2.1-alpha.8 | 1 | 04/04/2026 |
| 1.2.0 | 1 | 04/04/2026 |
| 1.1.3 | 1 | 04/04/2026 |
| 1.1.2.1 | 1 | 04/04/2026 |
| 1.1.2-alpha.5 | 1 | 04/04/2026 |
| 1.1.1 | 1 | 04/04/2026 |
| 1.1.0.1 | 1 | 04/04/2026 |
| 1.0.2 | 1 | 04/04/2026 |
| 1.0.1 | 1 | 04/04/2026 |
| 1.0.0 | 1 | 04/04/2026 |
| 0.10.3 | 1 | 04/04/2026 |
| 0.10.2 | 1 | 04/04/2026 |
| 0.10.1.2 | 1 | 04/04/2026 |
| 0.10.1 | 1 | 04/04/2026 |
| 0.9.2 | 1 | 04/04/2026 |
| 0.9.1 | 1 | 04/04/2026 |
| 0.9.0.3 | 1 | 04/04/2026 |
| 0.9.0 | 1 | 04/04/2026 |
| 0.8.1 | 1 | 04/04/2026 |
| 0.8.0 | 1 | 04/04/2026 |
| 0.7.1 | 1 | 04/04/2026 |
| 0.6.1 | 1 | 04/04/2026 |

