【问题标题】:Is there a database connection library out there that will handle multiple types of DB connections and operations (i.e. OleDb, SQLite, ADO, etc)?是否有一个数据库连接库可以处理多种类型的数据库连接和操作(即 OleDb、SQLite、ADO 等)?
【发布时间】:2011-05-20 16:18:01
【问题描述】:

我拥有的是一个我们正在开发的 Access 数据库,但我们需要将其转换为 SQLite 并将其发送到另一个客户端,同时保持代码对 Access 数据库以及使用我们程序的所有其他人都有效。

我最需要的是可以处理 Access 和 SQLite 数据库上的连接和操作的东西。这样的事情是否存在。而且我知道这些数据库的数据和查询是不同的,我可以单独处理。

对于如何处理两个单独的数据库以及这种情况,还有其他建议吗?

编辑:

我真正需要的是可以做到这一点的东西:

public AnyDBConnection GetConnection(string connectionString)
{
    //I guess somehow this needs to know the DB type (OleDB, SQLite, etc.)
    return new AnyDBConnection(connectionString);
}

【问题讨论】:

  • 你看过 NHibernate 吗?
  • 有点,但这不是我要找的。见上文。

标签: c# database sqlite oledb


【解决方案1】:

对于底层解决方案,所有 ADO.NET 类都有公共的基类和接口,例如DbConnection、IDbConnection 等。接口在命名空间System.Data 下,而抽象基类在在System.Data.Common下。

大多数第 3 部分 ADO.NET 库继承/实现这些,以便可以在这些通用接口下处理所有特定于数据库的连接和命令等。它们还应该有一个派生自DbProviderFactory 的类,用于创建不同具体对象的集中接口。

您可以在某处使用CreateFactory 方法,在配置中查找正在使用的数据库和连接字符串,然后为您创建适当的工厂对象。

【讨论】:

    【解决方案2】:

    通常,人们会在这类场景中使用 ORM。 LLBLGgen 是商业的,但如果您需要对许多数据库的支持,我认为它是最先进的。此外,您可以使用企业库:

     public static Database GetDataBaseInstance()
        {
            try
            {
                //Create an object of the Database class and get the database connection info
                Database db = DatabaseFactory.CreateDatabase(SqlConnectionString);
                return db;
            }
            catch
            {
                throw;
            }
        }  
    

    另外,请查看this 文章。 并将其与您的代码一起使用。并确保您的代码与所有数据库类型兼容

    【讨论】:

      【解决方案3】:

      我建议您使用Domain Driven Design 中的persistence ignorance 方法。 DDD 的目的是解耦系统:模型对存储一无所知。在 DDD 中,您将适应存储库模式或更好的 Generic Repository Pattern。这种模式通常在内部使用 ORM(实际上很容易添加)。因此,您将能够从任何存储中保存/查询您的数据。

      总结一下

      • 使用 DDD
      • 为持久性无知实现通用存储库
      • 像 NHibernate 或实体框架一样获取 ORM
      • 添加控制反转以选择所需的存储

      【讨论】:

        【解决方案4】:

        如果您为所有受支持的数据库提供了 ADO.NET 2.0 提供程序,并且在配置文件的 部分中定义了连接字符串,则可以执行以下操作:

        ConnectionStringSettings c = ConfigurationManager.ConnectionStrings[name];
        DbProviderFactory factory = DbProviderFactories.GetFactory(c.ProviderName);
        using(IDbConection connection = factory.CreateConnection())
        {
            connection.ConnectionString = c.ConnectionString;
            ... etc
        }
        

        您通常希望将其封装在通用 DAL 类中,这样,例如,您无需在每次需要连接时都实例化工厂。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          • 2015-02-21
          相关资源
          最近更新 更多