Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有一个数据库连接库可以处理多种类型的数据库连接和操作(即OleDb、SQLite、ADO等)?_C#_Database_Sqlite_Oledb - Fatal编程技术网

C# 是否有一个数据库连接库可以处理多种类型的数据库连接和操作(即OleDb、SQLite、ADO等)?

C# 是否有一个数据库连接库可以处理多种类型的数据库连接和操作(即OleDb、SQLite、ADO等)?,c#,database,sqlite,oledb,C#,Database,Sqlite,Oledb,我拥有的是一个我们正在处理的Access数据库,但我们需要将其转换为SQLite并将其发送到另一个客户机,同时保持Access数据库以及使用我们程序的所有其他客户机的代码正常工作 我最起码需要的是能够处理Access和SQLite数据库上的连接和操作的东西。这样的事情真的存在吗。我知道这些数据库的数据和查询是不同的,我可以单独处理 对于如何处理两个独立的数据库和这种情况,还有其他建议吗 编辑: 我真正需要的是能够做到这一点的东西: public AnyDBConnection GetConnec

我拥有的是一个我们正在处理的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);
}

通常,人们会在这种情况下使用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;
        }
    }  
另外,看看这篇文章。
并将其与代码一起使用。并确保您的代码与所有数据库类型兼容。对于较低级别的解决方案,所有ADO.NET类都有通用的基类和接口,例如
DbConnection
IDbConnection
,等。接口位于命名空间
System.Data
下,而抽象基类位于
System.Data.Common

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

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

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

总之

  • 使用DDD
  • 实现持久化的通用存储库
  • 获取类似NHibernate或实体框架的ORM
  • 添加控制反转以选择所需的存储

如果所有受支持的数据库都有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类中,这样,例如,您就不需要在每次需要连接时都实例化工厂。

您看过NHibernate吗?有一点,但这并不完全是我想要的。见上文。