多数据库支持

ClownFish 提供了【多数据库支持】的特性,直接可支持以下数据库(已适配):

  • SQLSERVER
  • MySQL
  • PostgreSQL
  • SQLite
  • 达梦

为了更好的支持MySQL,还同时支持MySql.Data和MySqlConnector 2种不同的客户端,可参考:MySQL异步



开发层面的差异

在ADO.NET基础上,不同的数据库在开发层面主要有以下方面的差异:

  • 获取一个标识符的完整形式。拿SQLSERVER来说,传入 xxx 则应该返回 [xxx]
  • 判断异常是不是由于 【重复INSERT】 导致的异常
  • 获取与数据库类型匹配的SQL语句中的参数名称,一般情况:@name
  • 获取与数据库类型匹配的命令集合中参数名称,一般情况:@name
  • 根据一条查询语句生成对应的2个分页查询 (List+Count)
  • 切换数据库,一般情况:use db1
  • 获取新产生的自增列的值

在ClownFish中定义了一个抽象类来隔离不同的数据库差异:

public abstract class BaseClientProvider

为了支持本文开头列出的4种数据库,ClownFish 内置了7个实现类:

  • MsSqlClientProvider 支持 SQLSERVER,基于 System.Data.SqlClient
  • MsSqlClientProvider2 支持 SQLSERVER,基于 Microsoft.Data.SqlClient
  • MySqlDataClientProvider 支持 MySQL,基于 MySql.Data
  • MySqlConnectorClientProvider 支持 MySQL,基于 MySqlConnector
  • PostgreSqlClientProvider 支持 PostgreSQL,基于 Npgsql
  • SQLiteClientProvider 支持 SQLite,基于 System.Data.SQLite
  • DaMengClientProvider 支持 达梦,基于 DmProvider

而且还内置了2个"过时的"实现类供参考:

  • OdbcClientProvider
  • OledbClientProvider

如果遇到不能支持的数据库类型(例如:Oracle),请自行实现ClientProvider



特别注意事项
ClownFish虽然支持多种数据库客户端,但ClownFish本身没有引用那些客户端!
全部采用的是反射方式实现。
如果程序启动时出现异常且有XXX程序集找不到时,请在项目中自行引用,然后还要在代码中访问某个类型。



客户端注册方法

可调用以下方法:

/// <summary>
/// DbProviderFactory的辅助工具类
/// </summary>
public static class DbClientFactory
{
    /// <summary>
    /// 注册数据客户端提供者实例
    /// </summary>
    /// <param name="providerName">客户端提供者名称</param>
    /// <param name="provider">提供者实例</param>
    public static void RegisterProvider(string providerName, BaseClientProvider provider)