Skip to content

Repository files navigation

DuckDB.NET

DuckDB bindings for C#

Note: The library is in very early stage and contributions are more than wellcome.

Usage

There are two ways to work with DuckDB from C# :

Using ADO.NET Provider or using low level bindings library for DuckDB. The ADO.NET Provider is built on top of the low level library and is the recommended and most straightforward way for working with DuckDB.

Using ADO.NET Provider

PM> Install-Package DuckDB.NET.Data
using(varduckDBConnection=newDuckDBConnection("Data Source=file.db")){duckDBConnection.Open();varcommand=duckDBConnection.CreateCommand();command.CommandText="CREATE TABLE integers(foo INTEGER, bar INTEGER);";varexecuteNonQuery=command.ExecuteNonQuery();command.CommandText="INSERT INTO integers VALUES (3, 4), (5, 6), (7, 8);";executeNonQuery=command.ExecuteNonQuery();command.CommandText="Select count(*) from integers";varexecuteScalar=command.ExecuteScalar();command.CommandText="SELECT foo, bar FROM integers";varreader=command.ExecuteReader();PrintQueryResults(reader);}privatestaticvoidPrintQueryResults(DbDataReaderqueryResult){for(varindex=0;index<queryResult.FieldCount;index++){varcolumn=queryResult.GetName(index);Console.Write($"{column} ");}Console.WriteLine();while(queryResult.Read()){for(intordinal=0;ordinal<queryResult.FieldCount;ordinal++){varval=queryResult.GetInt32(ordinal);Console.Write(val);Console.Write(" ");}Console.WriteLine();}}

For in-memory database use Data Source=:memory: connection string.

Use low level bindings library

PM> Install-Package DuckDB.NET.Bindings
varresult=DuckDBOpen(null,outvardatabase);using(database){result=DuckDBConnect(database,outvarconnection);using(connection){result=DuckDBQuery(connection,"CREATE TABLE integers(foo INTEGER, bar INTEGER);",outvarqueryResult);result=DuckDBQuery(connection,"INSERT INTO integers VALUES (3, 4), (5, 6), (7, 8);",outqueryResult);result=DuckDBQuery(connection,"SELECT foo, bar FROM integers",outqueryResult);PrintQueryResults(queryResult);result=DuckDBPrepare(connection,"INSERT INTO integers VALUES (?, ?)",outvarinsertStatement);using(insertStatement){result=DuckDBBindInt32(insertStatement,1,42);// the parameter index starts counting at 1!result=DuckDBBindInt32(insertStatement,2,43);result=DuckDBExecutePrepared(insertStatement,outvar_);}result=DuckDBPrepare(connection,"SELECT * FROM integers WHERE foo = ?",outvarselectStatement);using(selectStatement){result=DuckDBBindInt32(selectStatement,1,42);result=DuckDBExecutePrepared(selectStatement,outqueryResult);}PrintQueryResults(queryResult);// clean upDuckDBDestroyResult(outqueryResult);}}privatestaticvoidPrintQueryResults(DuckDBResultqueryResult){for(varindex=0;index<queryResult.Columns.Count;index++){varcolumn=queryResult.Columns[index];Console.Write($"{column.Name} ");}Console.WriteLine();for(longrow=0;row<queryResult.RowCount;row++){for(longcolumn=0;column<queryResult.ColumnCount;column++){varval=DuckDBValueInt32(queryResult,column,row);Console.Write(val);Console.Write(" ");}Console.WriteLine();}}

About

https://duckdb.org/ bindings and ADO.NET Provider for C#

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages