Skip to content

skuirrels/DuckDB.NET

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,079 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DuckDB.NET - Performance fork preview

This is the skuirrels/DuckDB.NET fork of the upstream DuckDB.NET project. It provides preview packages containing the cutting-edge performance work while the corresponding upstream pull requests are reviewed and released.

NuGet (Data) NuGet (Bindings) .NET 8 and 10 License: MIT

Usage

dotnet add package Skuirrels.DuckDB.NET.Data.Full --version 1.5.4-preview.2

The fork packages retain the official DuckDB.NET.Data namespaces and assembly names. Do not reference this package and the official DuckDB.NET.Data.Full package in the same dependency graph.

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

For a fork-specific problem, create an issue in this fork. For upstream DuckDB.NET support, use the upstream issue tracker. You can also join the DuckDB dotnet channel for DuckDB.NET-related topics.

Upstream contributors

Contributors

Sponsors

A big thanks to DuckDB Labs and AWS Open Source Software Fund for sponsoring the project!

DuckDB Labs

AWS

About

ADO.NET Provider for DuckDB - Performance Edition

Resources

License

Code of conduct

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

No contributors

Languages

  • C# 99.5%
  • Shell 0.5%