Quick Start
Create a Connection
using System.Data.SqlClient;
using DataProvider;
var connectionString = "Server=localhost;Database=MyDb;...";
using var connection = new SqlConnection(connectionString);
connection.Open();
Execute Queries
Select
var orders = connection.Query<Order>(
"SELECT * FROM Orders WHERE Status = @status",
new { status = "Active" }
);
foreach (var order in orders)
{
Console.WriteLine($"{order.Id}: {order.Name}");
}
Insert
var affectedRows = connection.Execute(
"INSERT INTO Orders (Name, Status) VALUES (@name, @status)",
new { name = "New Order", status = "Pending" }
);
Update
connection.Execute(
"UPDATE Orders SET Status = @status WHERE Id = @id",
new { status = "Completed", id = 123 }
);
Delete
connection.Execute(
"DELETE FROM Orders WHERE Id = @id",
new { id = 123 }
);
Using Transactions
using var transaction = connection.BeginTransaction();
try
{
transaction.Execute("INSERT INTO ...");
transaction.Execute("UPDATE ...");
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
Using LQL for Cross-Database Queries
Instead of writing raw SQL, use LQL to write queries that work across all databases:
using Lql;
using Lql.SQLite;
var lql = "Orders |> filter(fn(row) => row.Status = 'Active') |> select(Id, Name)";
var sql = LqlCodeParser.Parse(lql).ToSql(new SQLiteContext());
For F# projects, use the Type Provider for compile-time validation:
open Lql
type ActiveOrders = LqlCommand<"Orders |> filter(fn(row) => row.Status = 'Active') |> select(*)">
let sql = ActiveOrders.Sql // SQL validated at compile time
Next Steps
- DataProvider Documentation
- LQL Query Language - Cross-database query language
- F# Type Provider - Compile-time LQL validation
- API Reference