Supported Databases - pengdows/pengdows.crud GitHub Wiki

Table of Contents

Supported Databases

pengdows.crud is designed to work with a wide range of relational databases that conform to core ADO.NET and ANSI SQL standards. It supports many databases out-of-the-box and allows workarounds for others, provided certain criteria are met.

Fully Supported Databases

The following databases are directly tested and supported:

βœ… SQL Server / Express / LocalDB

  • Full support, including stored procedures, indexed views, and named parameters.
  • Special settings are applied for indexed view compatibility.
  • Changes to default behavior for SQL Server

βœ… PostgreSQL

  • Full support.
  • Uses standard ANSI syntax and behaves well with all major features.

βœ… CockroachDB

  • Fully supported with enforced SERIALIZABLE isolation level.
  • Treated as a special case in transaction logic.

βœ… Oracle

  • Supported with known quirks:
    • NUMBER type coercion is and handled automatically.
    • Stored procedure call syntax is nonstandard (`BEGIN ... END`) and injected accordingly

βœ… MySQL

  • Fully supported with overrides:
    • Must be configured to conform to ANSI SQL standards (e.g., using single quotes for strings)
    • Handles MySQL’s quirk where date fields return as strings
    • Changes to default behavior for MySQL

βœ… MariaDb

  • Fully supported with overrides:
    • Must be configured to conform to ANSI SQL standards (e.g., using single quotes for strings)
    • Handles MySQL’s quirk where date fields return as strings
    • Changes to default behavior for MariaDb

βœ… SQLite

  • Supported using fallback metadata (simulated GetSchema)
  • Great for lightweight testing and dev scenarios
  • Behaves like a file-based DB

βœ… Firebird

  • Tested and supported via container (does not require embedded mode)

Database Support Criteria

For a database to be supported, it must:

1. Have a .NET ADO.NET provider that is current and stable 2. Support `DbProviderFactory` creation and `DbConnection.GetSchema("DataSourceInformation")` 3. Use ANSI-standard SQL for SELECT, INSERT, UPDATE, DELETE 4. Support named (using @ or :) or positional (?) parameters 5. Have appropriate object identifier quoting (`"`, `[]`, or backticks) 6. Handle isolation levels in a predictable way (preferably with `READ COMMITTED` or `REPEATABLE READ`) 7. (Optional) Support stored procedures and allow programmatic call syntax detection (e.g., EXEC, CALL, BEGIN...END)

Not Fully Supported (but should work)

Databases that lack one or more of the above may still work **with manual configuration**:

  • TimesTen (I have already worked around the ExecuteScalar problem)
  • Older versions of Access (requires SingleConnection or SingleWriter mode)
  • Any database where ANSI joins or parameterization are not supported

Summary

pengdows.crud enforces best practices by design. If a database violates those practices in default mode, it can often still be supported through overrides, compatibility settings, and connection-level configuration.

If you’re using an uncommon database and want to try it, start by:

  • Checking your ADO.NET provider capabilities
  • Setting session options through `DatabaseContext.SessionSettings`
  • Logging the SQL output to catch dialect issues

Related Pages

⚠️ **GitHub.com Fallback** ⚠️