RepoDb.Connector.MariaDb
0.0.1-alpha2
Prefix Reserved
dotnet add package RepoDb.Connector.MariaDb --version 0.0.1-alpha2
NuGet\Install-Package RepoDb.Connector.MariaDb -Version 0.0.1-alpha2
<PackageReference Include="RepoDb.Connector.MariaDb" Version="0.0.1-alpha2" />
<PackageVersion Include="RepoDb.Connector.MariaDb" Version="0.0.1-alpha2" />
<PackageReference Include="RepoDb.Connector.MariaDb" />
paket add RepoDb.Connector.MariaDb --version 0.0.1-alpha2
#r "nuget: RepoDb.Connector.MariaDb, 0.0.1-alpha2"
#:package RepoDb.Connector.MariaDb@0.0.1-alpha2
#addin nuget:?package=RepoDb.Connector.MariaDb&version=0.0.1-alpha2&prerelease
#tool nuget:?package=RepoDb.Connector.MariaDb&version=0.0.1-alpha2&prerelease
<div align="center"> <a href="https://www.nuget.org/packages/RepoDb.Connector.MariaDb"> <image src="logo.png" style="width:256px;" /> </a> <br/> <span style="font-size:16px;font-weight:bold;">A lightweight, modern, and open-source ADO.NET data provider for MariaDB, built for RepoDB.</span> </div>
Disclaimer: This is an independent, unofficial .NET provider for MariaDB. It is a thin ADO.NET wrapper and type-mapping layer built on top of MySql.Data and is not affiliated with or endorsed by MariaDB plc or the MariaDB Foundation.
The project aims to provide a dedicated MariaDB connector based on the standard System.Data.Common abstractions, while exposing MariaDB-specific data types, behaviors, and capabilities where applicable. All objects will be prefixed by MariaDb so it is more standardized in .NET.
It implements the Async equivalent of the MySql.Data that is dedicated for MariaDB. It also covers the full implementation of Bulk operations using the MySql.Data's MySqlBulkLoader class.
Status: Early development. The API and implementation are subject to change.
Why is this exists?
As RepoDB expands its support for data movement across various database providers, dedicated MariaDB objects are required within its extension library, RepoDb.MariaDb, to avoid class collisions with RepoDb.MySql and RepoDb.MySqlConnector. The same applies to its Bulk Operations extension, RepoDb.MariaDb.BulkOperations.
This library will serve as the official MariaDB connector for RepoDB and will be used internally by the RepoDB project.
Goals of the library
RepoDb.Connector.MariaDb aims to:
- Provide a dedicated ADO.NET data provider for MariaDB.
- Follow the standard
System.Data.Commonprovider architecture. - Support modern synchronous and asynchronous .NET APIs.
- Provide MariaDB-specific data type mappings and behaviors.
- Remain lightweight and suitable for use by ORMs and other data-access libraries.
- Support high-performance MariaDB operations, including bulk operations, in future releases.
- Remain usable independently of any ORM.
Core ADO.NET Objects
RepoDb.Connector.MariaDb is built around the standard abstractions provided by System.Data.Common.
The following provider-specific objects form the core of the connector:
| RepoDb.Connector.MariaDb | ADO.NET Base Class | Purpose |
|---|---|---|
MariaDbConnection |
DbConnection |
Establishes and manages MariaDB connections |
MariaDbCommand |
DbCommand |
Executes SQL commands |
MariaDbDataReader |
DbDataReader |
Reads query results |
MariaDbParameter |
DbParameter |
Represents command parameters |
MariaDbParameterCollection |
DbParameterCollection |
Manages command parameters |
MariaDbTransaction |
DbTransaction |
Manages database transactions |
MariaDbException |
DbException |
Represents MariaDB errors |
MariaDbConnectionStringBuilder |
DbConnectionStringBuilder |
Builds and parses connection strings |
MariaDbProviderFactory |
DbProviderFactory |
Creates provider-specific ADO.NET objects |
The architecture follows the standard ADO.NET provider model:
System.Data.Common
│
├── DbConnection
│ └── MariaDbConnection
│
├── DbCommand
│ └── MariaDbCommand
│
├── DbDataReader
│ └── MariaDbDataReader
│
├── DbParameter
│ └── MariaDbParameter
│
├── DbParameterCollection
│ └── MariaDbParameterCollection
│
├── DbTransaction
│ └── MariaDbTransaction
│
├── DbException
│ └── MariaDbException
│
├── DbConnectionStringBuilder
│ └── MariaDbConnectionStringBuilder
│
└── DbProviderFactory
└── MariaDbProviderFactory
Basic Usage
RepoDb.Connector.MariaDb is intended to provide the familiar ADO.NET programming model.
using RepoDb.Connector.MariaDb;
var connectionString =
"Server=localhost;" +
"Port=3306;" +
"Database=TestDb;" +
"User ID=root;" +
"Password=password;";
await using var connection =
new MariaDbConnection(connectionString);
await connection.OpenAsync();
await using var command = connection.CreateCommand();
command.CommandText = """
SELECT Id, Name, Email
FROM Customer
WHERE Id = @Id;
""";
command.Parameters.AddWithValue("@Id", 100);
await using var reader = await command.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
var id = reader.GetInt32(0);
var name = reader.GetString(1);
var email = reader.GetString(2);
Console.WriteLine($"{id}: {name} ({email})");
}
MariaDbConnection
MariaDbConnection extends DbConnection and represents a connection to a MariaDB server.
await using var connection =
new MariaDbConnection(connectionString);
await connection.OpenAsync();
Console.WriteLine(connection.ServerVersion);
Console.WriteLine(connection.Database);
Console.WriteLine(connection.State);
Its responsibilities include:
- Connection establishment and termination
- Connection state management
- MariaDB session management
- Command creation
- Transaction creation
- Connection string handling
- Synchronous and asynchronous operations
MariaDbCommand
MariaDbCommand extends DbCommand and represents a SQL statement executed against MariaDB.
await using var command = new MariaDbCommand(
"SELECT * FROM Customer WHERE Id = @Id",
connection);
command.Parameters.AddWithValue("@Id", 100);
await using var reader =
await command.ExecuteReaderAsync();
The implementation is intended to support:
ExecuteNonQueryExecuteScalarExecuteReader- Async equivalents
- Parameterized SQL
- Prepared statements
- Command timeout
- Cancellation
- Multiple result sets
MariaDbParameter
MariaDbParameter extends DbParameter and represents a parameter associated with a MariaDbCommand.
var parameter = new MariaDbParameter
{
ParameterName = "@Id",
Value = 100
};
command.Parameters.Add(parameter);
A MariaDB-specific type system is also planned:
var parameter = new MariaDbParameter
{
ParameterName = "@Id",
MariaDbType = MariaDbType.Int,
Value = 100
};
MariaDB Data Types
RepoDb.Connector.MariaDb aims to provide a MariaDbType enumeration in addition to the standard ADO.NET DbType.
The current set of types includes:
public enum MariaDbType
{
TinyInt,
SmallInt,
MediumInt,
Int,
BigInt,
Decimal,
Float,
Double,
Bit,
Char,
VarChar,
TinyText,
Text,
MediumText,
LongText,
Enum,
Set,
Binary,
VarBinary,
TinyBlob,
Blob,
MediumBlob,
LongBlob,
Date,
Time,
DateTime,
Timestamp,
Year,
Json,
Geometry,
Point,
LineString,
Polygon,
MultiPoint,
MultiLineString,
MultiPolygon,
GeometryCollection
}
The connector will provide mappings between:
MariaDbType
↕
DbType
↕
.NET CLR Type
↕
MariaDB Server Type
MariaDbTypeConverter provides the current leg of that mapping, converting between MariaDbType and the underlying MySql.Data.MySqlClient.MySqlDbType:
var mariaDbType = MariaDbTypeConverter.ToMariaDbType(MySqlDbType.VarChar);
var mySqlDbType = MariaDbTypeConverter.ToMySqlDbType(MariaDbType.BigInt);
Transactions
MariaDbTransaction extends DbTransaction and provides standard ADO.NET transaction semantics.
await using var transaction =
await connection.BeginTransactionAsync();
try
{
await using var command = connection.CreateCommand();
command.Transaction = transaction;
command.CommandText =
"UPDATE Customer SET Name = @Name WHERE Id = @Id";
command.Parameters.AddWithValue("@Name", "John Doe");
command.Parameters.AddWithValue("@Id", 100);
await command.ExecuteNonQueryAsync();
await transaction.CommitAsync();
}
catch
{
await transaction.RollbackAsync();
throw;
}
Connection String Builder
MariaDbConnectionStringBuilder extends DbConnectionStringBuilder and provides a strongly typed way of creating MariaDB connection strings.
var builder = new MariaDbConnectionStringBuilder
{
Server = "localhost",
Port = 3306,
Database = "TestDb",
UserId = "root",
Password = "password"
};
await using var connection =
new MariaDbConnection(builder.ConnectionString);
await connection.OpenAsync();
Provider Factory
MariaDbProviderFactory extends DbProviderFactory and enables provider-independent ADO.NET applications and libraries to create RepoDb.Connector.MariaDb objects.
var factory = MariaDbProviderFactory.Instance;
using var connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
connection.Open();
Additional ADO.NET Support
Future releases may provide additional traditional ADO.NET components:
MariaDbDataAdapter
└── DbDataAdapter
MariaDbCommandBuilder
└── DbCommandBuilder
These components will provide support for DataTable, DataSet, and other traditional ADO.NET workflows.
The initial development effort will prioritize the core connection, command, parameter, transaction, and data-reader infrastructure.
Bulk Operations
RepoDb.Connector.MariaDb provides bulk-loading support under the RepoDb.Connector.MariaDb.Bulk namespace, built on top of LOAD DATA LOCAL INFILE via MySql.Data's MySqlBulkLoader.
| RepoDb.Connector.MariaDb.Bulk | Purpose |
|---|---|
MariaDbBulkCopy |
Efficiently bulk-loads a DbDataReader/IDataReader, DataTable, or DataRow[] into a MariaDB table |
MariaDbBulkColumnMapping |
Defines the mapping between a source column and a destination column |
MariaDbBulkCopyColumnMappingCollection |
The collection of MariaDbBulkColumnMapping objects exposed by MariaDbBulkCopy.ColumnMappings |
MariaDbBulkLoader |
A strongly typed wrapper around LOAD DATA LOCAL INFILE, for loading directly from a file or stream |
MariaDbBulkLoaderConflictOption |
Controls how MariaDbBulkLoader behaves when a key conflict arises during a load |
MariaDbBulkLoaderPriority |
Controls the priority (None, Low, Concurrent) of a MariaDbBulkLoader operation |
MariaDbBulkCopy
MariaDbBulkCopy writes its source rows to a temporary file and loads them with MariaDbBulkLoader:
await using var connection =
new MariaDbConnection(connectionString);
await connection.OpenAsync();
using var bulkCopy = new MariaDbBulkCopy(connection)
{
DestinationTableName = "Customer",
BatchSize = 10_000
};
bulkCopy.ColumnMappings.Add("Id", "Id");
bulkCopy.ColumnMappings.Add("Name", "Name");
bulkCopy.ColumnMappings.Add("Email", "Email");
await bulkCopy.WriteToServerAsync(customersDataTable);
Console.WriteLine(bulkCopy.RowsCopied);
WriteToServer/WriteToServerAsync are overloaded to accept an IDataReader, a DbDataReader, a DataTable (optionally filtered by DataRowState), or a DataRow[].
MariaDbBulkLoader
MariaDbBulkLoader can also be used directly for LOAD DATA LOCAL INFILE-style loading from a file or stream, without going through MariaDbBulkCopy:
var bulkLoader = new MariaDbBulkLoader(connection)
{
TableName = "Customer",
FileName = "customers.csv",
FieldTerminator = ",",
LineTerminator = "\n",
Local = true
};
bulkLoader.Columns.Add("Id");
bulkLoader.Columns.Add("Name");
bulkLoader.Columns.Add("Email");
var rowsLoaded = await bulkLoader.LoadAsync();
Architecture
RepoDb.Connector.MariaDb is more than a set of ADO.NET wrapper classes. The public ADO.NET API will sit on top of the MariaDB communication and protocol infrastructure.
Application / ORM
│
▼
MariaDbConnection
│
▼
MariaDbCommand
│
▼
MariaDB Session
│
├── Authentication
├── TLS
├── Prepared Statements
├── Parameter Encoding
├── Result Set Parsing
├── Type Encoding/Decoding
└── Cancellation
│
▼
MariaDB Protocol
│
▼
TCP
│
▼
MariaDB Server
Roadmap
The initial development will focus on the essential ADO.NET provider infrastructure:
MariaDbConnectionMariaDbCommandMariaDbParameterMariaDbParameterCollectionMariaDbDataReaderMariaDbTransactionMariaDbExceptionMariaDbConnectionStringBuilderMariaDbProviderFactoryMariaDbTypeandMariaDbTypeConverterMariaDbBulkCopy,MariaDbBulkColumnMapping,MariaDbBulkCopyColumnMappingCollection, andMariaDbBulkLoader
Subsequent development may include:
- Connection pooling
- Prepared statements
- TLS/SSL
- Authentication mechanisms
- Cancellation
- Multiple result sets
- Advanced server metadata
MariaDbDataAdapterMariaDbCommandBuilder- Native (non
LOAD DATA-based) bulk execution protocol - Performance optimizations
ORM and Library Integration
Although RepoDb.Connector.MariaDb can be used directly through ADO.NET, it is designed to work naturally with libraries that operate against the standard System.Data.Common abstractions.
For example:
RepoDB
Dapper
Custom Data Access Layers
ADO.NET Applications
Other DbConnection-based Libraries
│
▼
RepoDb.Connector.MariaDb
│
▼
MariaDB Server
The connector itself should remain independent of any ORM.
Contributing
RepoDb.Connector.MariaDb is in its early stages, and contributions are welcome.
Areas where contributions will be particularly valuable include:
- MariaDB wire protocol implementation
- Authentication
- Type mappings
- Prepared statements
- Connection pooling
- TLS/SSL
- Async I/O
- MariaDB version compatibility
- Performance benchmarking
- Bulk operations
- Integration and compatibility testing
When contributing, please keep the implementation aligned with the standard ADO.NET architecture and avoid unnecessary abstractions that could negatively affect performance.
Changelog
See CHANGELOG.md for the release history of every connector in this repository.
License
RepoDb.Connector.MariaDb is an independent open-source project. MariaDB is a trademark of its respective owner. This project is not affiliated with, sponsored by, or endorsed by MariaDB plc or the MariaDB Foundation.
Apache License 2.0 — Copyright © 2026 Michael Camara Pendon
This project depends on Oracle's MySQL Connector/NET (MySql.Data),
which is separately licensed under GPL-2.0 with the Universal FOSS
Exception, Version 1.0.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- MySql.Data (>= 26.7.0)
-
net10.0
- MySql.Data (>= 26.7.0)
-
net8.0
- MySql.Data (>= 26.7.0)
-
net9.0
- MySql.Data (>= 26.7.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on RepoDb.Connector.MariaDb:
| Package | Downloads |
|---|---|
|
RepoDb.MariaDb
A hybrid .NET ORM library for MariaDB (using RepoDb.Connector.MariaDb). |
|
|
RepoDb.MariaDb.BulkOperations
An extension library that contains the official Bulk Operations of RepoDB for MariaDB (using RepoDb.Connector.MariaDb). |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.0.1-alpha2 | 0 | 8/19/2026 |
| 0.0.1-alpha1 | 43 | 8/18/2026 |