C# 是否有一个数据库连接库可以处理多种类型的数据库连接和操作(即OleDb、SQLite、ADO等)?
我拥有的是一个我们正在处理的Access数据库,但我们需要将其转换为SQLite并将其发送到另一个客户机,同时保持Access数据库以及使用我们程序的所有其他客户机的代码正常工作 我最起码需要的是能够处理Access和SQLite数据库上的连接和操作的东西。这样的事情真的存在吗。我知道这些数据库的数据和查询是不同的,我可以单独处理 对于如何处理两个独立的数据库和这种情况,还有其他建议吗 编辑: 我真正需要的是能够做到这一点的东西:C# 是否有一个数据库连接库可以处理多种类型的数据库连接和操作(即OleDb、SQLite、ADO等)?,c#,database,sqlite,oledb,C#,Database,Sqlite,Oledb,我拥有的是一个我们正在处理的Access数据库,但我们需要将其转换为SQLite并将其发送到另一个客户机,同时保持Access数据库以及使用我们程序的所有其他客户机的代码正常工作 我最起码需要的是能够处理Access和SQLite数据库上的连接和操作的东西。这样的事情真的存在吗。我知道这些数据库的数据和查询是不同的,我可以单独处理 对于如何处理两个独立的数据库和这种情况,还有其他建议吗 编辑: 我真正需要的是能够做到这一点的东西: public AnyDBConnection GetConnec
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
- 添加控制反转以选择所需的存储
ConnectionStringSettings c = ConfigurationManager.ConnectionStrings[name];
DbProviderFactory factory = DbProviderFactories.GetFactory(c.ProviderName);
using(IDbConection connection = factory.CreateConnection())
{
connection.ConnectionString = c.ConnectionString;
... etc
}
通常,您会希望将其封装在通用DAL类中,这样,例如,您就不需要在每次需要连接时都实例化工厂。您看过NHibernate吗?有一点,但这并不完全是我想要的。见上文。