SQLProvider 1.5.32
dotnet add package SQLProvider --version 1.5.32
NuGet\Install-Package SQLProvider -Version 1.5.32
<PackageReference Include="SQLProvider" Version="1.5.32" />
<PackageVersion Include="SQLProvider" Version="1.5.32" />
<PackageReference Include="SQLProvider" />
paket add SQLProvider --version 1.5.32
#r "nuget: SQLProvider, 1.5.32"
#:package SQLProvider@1.5.32
#addin nuget:?package=SQLProvider&version=1.5.32
#tool nuget:?package=SQLProvider&version=1.5.32
SQLProvider 
A general .NET SQL database type provider. Current features :
- LINQ queries
- Lazy schema exploration
- Automatic constraint navigation
- Individuals
- Transactional CRUD operations with identity support
- Two-way data binding
- Stored Procedures
- Functions
- Packages (Oracle)
- Composable Query integration
- Optional option types
- Mapping to record types
- Custom Operators
- Supports Asynchronous Operations
- Supports .NET Standard / .NET Core
- Supports saving DB schema offline, and SQL-Server *.dacpac files
The provider currently has explicit implementations for the following database vendors :
- SQL Server
- SQLite
- PostgreSQL
- Oracle
- MySQL (& MariaDB)
- MsAccess
- Firebird
- DuckDB
There is also an ODBC provider that will let you connect to any ODBC source with limited features.
Documentation
SQLProvider home page contains the core documentation and samples. This documentation originates from docs/content/, so please feel free to submit a pull request if you fix typos or add additional samples and documentation!
Building 
- Linux/macOS: Run build.sh
- Windows: Run build.cmd
(Note: both scripts above use the dotnet command underneath; if you need to build
with .NETFramework v4.x or Mono, rename the '.paket_netfx' to '.paket' first, before
restoring & building manually with paket and msbuild.)
Known issues
- Database vendors other than SQL Server and Access use dynamic assembly loading. This may cause some security problems depending on your system's configuration and which version of the .NET framework you are using. If you encounter problems loading dynamic assemblies, they can likely be resolved by applying the following element into the configuration files of fsi.exe, devenv.exe and your program or the program using your library: http://msdn.microsoft.com/en-us/library/dd409252(VS.100).aspx
Example

Maintainer(s)
The default maintainer account for projects under "fsprojects" is @fsprojectsgit - F# Community Project Incubation Space (repo management)
Nuget Packages
| Database | Nuget Package | TypeProvider Class | NuGet Status |
|---|---|---|---|
| Microsoft SQL Server | SQLProvider.MsSql | FSharp.Data.Sql.MsSql.SqlDataProvider | |
| PostgreSQL | SQLProvider.PostgreSql | FSharp.Data.Sql.PostgreSql.SqlDataProvider | |
| MySQL and MariaDB | SQLProvider.MySqlConnector | FSharp.Data.Sql.MySqlConnector.SqlDataProvider | |
| MySQL | SQLProvider.MySql | FSharp.Data.Sql.MySql.SqlDataProvider | |
| Oracle | SQLProvider.Oracle | FSharp.Data.Sql.Oracle.SqlDataProvider | |
| Any ODBC connection | SQLProvider.Odbc | FSharp.Data.Sql.Odbc.SqlDataProvider | |
| SQLite | SQLProvider.SQLite | FSharp.Data.Sql.SQLite.SqlDataProvider | |
| Microsoft Access | SQLProvider.MsAccess | FSharp.Data.Sql.MsAccess.SqlDataProvider | |
| Firebird | SQLProvider.Firebird | FSharp.Data.Sql.Firebird.SqlDataProvider | |
| DuckDb | SQLProvider.DuckDb | FSharp.Data.Sql.DuckDb.SqlDataProvider | |
| General, all via manual config | SQLProvider | FSharp.Data.Sql.SqlDataProvider |
Depending on the used provider, the namespace of the SqlDataProvider type class varies as above.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. 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 was computed. 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 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 is compatible. net48 is compatible. 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. |
-
- FSharp.Core (>= 10.0.109)
- Newtonsoft.Json (>= 13.0.1)
- System.Memory (>= 4.6.3)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on SQLProvider:
| Package | Downloads |
|---|---|
|
Softellect.Sys
Softellect Sys Library provides primitive types and functionality needed by other Softellect packages. |
|
|
Softellect.Messaging
Softellect Messaging Library provides a simple general framework to exchange large messages without specific IO. |
|
|
FCQRS.SqlProvider
Package Description |
|
|
Softellect.DistributedProcessing.Core
Softellect WorkerNode ... |
|
|
FCQRS8.SQLProvider
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.5.32 | 48 | 11/14/2026 |
| 1.5.31 | 58 | 11/13/2026 |
| 1.5.30 | 220 | 11/3/2026 |
| 1.5.29 | 91 | 11/3/2026 |
| 1.5.28 | 1,587 | 10/17/2026 |
| 1.5.27 | 1,149 | 7/29/2026 |
| 1.5.26 | 252 | 7/10/2026 |
| 1.5.25 | 368 | 7/3/2026 |
| 1.5.24 | 312 | 6/14/2026 |
| 1.5.23 | 157 | 6/13/2026 |
| 1.5.22 | 168 | 6/11/2026 |
| 1.5.21 | 211 | 5/28/2026 |
| 1.5.20 | 168 | 5/26/2026 |
| 1.5.19 | 722 | 4/7/2026 |
| 1.5.18 | 239 | 3/31/2026 |
| 1.5.17 | 6,650 | 9/14/2025 |
| 1.5.16 | 1,026 | 9/9/2025 |
| 1.5.14 | 474 | 8/29/2025 |
| 1.5.12 | 1,466 | 7/21/2025 |
- Fix: PostgreSQL functions are called inside a SELECT. With Npgsql 7 and newer they failed with "procedure ... does not exist", as a stored-procedure command is a CALL there
- PostgreSQL procedures (11 and newer) are under ctx.Procedures and called with CALL, with any Npgsql version; they weren't listed before. INOUT and OUT parameters are the result's properties
- PostgreSQL functions and procedures are called by schema and name, so the schema needn't be on the search path
- Fix: an INOUT parameter takes the value given to Invoke on PostgreSQL, MySQL and Oracle; a parameter after it took the wrong value
- Fix: MySQL 8 routines with parameters broke the type provider ("Unable to cast object of type 'System.UInt64' to type 'System.Int32'")
- Fix: MySQL functions return their value with MySqlConnector, and when called async with either driver (the async call didn't run the function)
- Fix: Oracle functions called async return their value (the async call didn't run the function)
- MySQL routines of another database of Owner are called by database and name, and Oracle routines by owner and name: another schema's routines were not found
- Fix: Firebird 3 and newer: a procedure without SUSPEND gives its output parameters as the one row of ResultSet; it failed with "invalid request BLR" (the procedure is not selectable)
- Firebird: a standalone SubmitUpdates runs as SNAPSHOT instead of SNAPSHOT TABLE STABILITY (Firebird's Serializable), which locked whole tables: concurrent writers of a table failed with "lock conflict on no wait transaction". Its transaction ends before its connection returns to the pool
- A query's column lookup locks one table instead of the whole provider, and PostgreSQL reads cached columns and relationships without a lock
- Fix: a PostgreSQL function called inside a TransactionScope with Npgsql before 5 failed with "Nested/Concurrent transactions aren't supported"
- Fix: PostgreSQL 10 and 11 work again: the column query needed pg_attribute.attgenerated (PostgreSQL 12)