Skip to main content
AdoNet.Async

AdoNet.Async

Async-first interfaces and base classes for ADO.NET

Async-First

ValueTask everywhere, IAsyncEnumerable iteration, async events. Built for modern .NET with zero compromises on performance.

Drop-In Replacement

Wrap any existing DbConnection with .AsAsync() and get a fully async interface. No provider-specific code needed.

Typed DataSets

Source generator reads .xsd files and produces strongly-typed async DataSet classes. Full IntelliSense, compile-time safety.

Zero-Alloc Events

9 async events on AsyncDataTable backed by ZeroAlloc.AsyncEvents. Sequential dispatch, cancellation support, no allocations.

JSON Serialization

Newtonsoft.Json and System.Text.Json converters with identical wire format. Cross-library compatible.

DI Ready

One-liner registration with AddAsyncData(). Inject IAsyncDbProviderFactory anywhere in your application.

Before

using var conn = new SqlConnection(cs);
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM Users";
var reader = cmd.ExecuteReader();
while (reader.Read())
{
    Console.WriteLine(reader.GetString(1));
}

After

var conn = new SqlConnection(cs).AsAsync();
await conn.OpenAsync();
var cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM Users";
var reader = await cmd.ExecuteReaderAsync();
await foreach (var record in reader)
{
    Console.WriteLine(record.GetString(1));
}

6 Packages, One Ecosystem

AdoNet.Async

Core interfaces and abstract base classes. Zero dependencies.

AdoNet.Async.DataSet

AsyncDataTable, AsyncDataRow, 9 async events.

AdoNet.Async.Adapters

Wrap any DbConnection with .AsAsync() + DI support.

AdoNet.Async.DataSet.Generator

Roslyn source generator for typed DataSets from .xsd.

Serialization.NewtonsoftJson

Json.NET converters, wire-compatible format.

Serialization.SystemTextJson

System.Text.Json converters, identical wire format.