Skip to content

Using XTDB from C#

In C#, you can talk to a running XTDB node using the Npgsql PostgreSQL driver, taking advantage of XTDB’s PostgreSQL wire-compatibility.

To install Npgsql, add it to your project:

Terminal window
dotnet add package Npgsql

Or via NuGet Package Manager:

Install-Package Npgsql

Once you’ve started your XTDB node, you can use the following code to connect to it:

using System;
using System.Threading.Tasks;
using Npgsql;
class XtdbExample
{
static async Task Main()
{
var connectionString = "Host=localhost;Port=5432;Database=xtdb;Username=xtdb;Password=xtdb;";
var dataSourceBuilder = new NpgsqlDataSourceBuilder(connectionString);
// Required for XTDB support
dataSourceBuilder.ConfigureTypeLoading(sb => {
sb.EnableTypeLoading(false);
sb.EnableTableCompositesLoading(false);
});
var dataSource = dataSourceBuilder.Build();
var connection = await dataSource.OpenConnectionAsync();
await using (var insertCommand = connection.CreateCommand())
{
insertCommand.Parameters.Add(new NpgsqlParameter()).Value = "Alice";
insertCommand.CommandText = "INSERT INTO users (_id, name) VALUES (1, ?)";
await insertCommand.ExecuteNonQueryAsync();
}
await using (var queryCommand = connection.CreateCommand())
{
queryCommand.CommandText = "SELECT _id, name FROM users";
await using var reader = await queryCommand.ExecuteReaderAsync();
Console.WriteLine("Users:");
while (await reader.ReadAsync())
{
var id = reader.GetInt32(0);
var name = reader.GetString(1);
Console.WriteLine($" * {id}: {name}");
}
}
Console.WriteLine("\n✓ XTDB connection successful");
}
}
/* Output:
Users:
* 1: Alice
✓ XTDB connection successful
*/

For more examples and tests, see the XTDB driver-examples repository, which contains comprehensive test suites demonstrating various features and use cases.