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.