我的任务是编写一个项目来连接多个不同的数据库,如Oracle,SQL Server,Spatialite等,并获取和设置数据值,我想知道你会在标题中选择哪一个推荐这个。
我创建了一个利用OLE功能的类,以便建立连接并设置和检索数据,因为我认为ADO更像是SQL Server特定的技术。是这种情况还是可以将ADO.NET用于各种数据源?我已经研究了很多,我见过的大多数地方都推荐使用多种可能的数据源的OLE,而他们推荐使用ADO for SQL Server。
由于
答案 0 :(得分:3)
我无法看到OLE如何为统一DAL提供灵丹妙药。您希望使用最适合数据源的数据访问框架,并从应用程序中抽象出实现。
我的猜测是你希望使用OLE将允许一些语法统一。但这种情况并非如此。一旦你尝试做一些像分页这样的事情,每个数据源都会有自己的怪癖,你如何连接到源代码并不能帮助统一语法差异。例如,在分页的情况下,SQLite使用SKIP,TAKE。 Oracle使用ROWNUM。 Sql Server使用TOP。
我会通过创建一个DAL来解决问题,该DAL将实体类从数据源中抽象出来。然后,您可以使用最适合数据源的连接类型。例如,假设我的应用程序想要从数据源检索“产品”。我的应用程序只知道ProductFactory接口,而不是数据源类型的细节。例如,
string id = "0000001";
IProductFactory factory = FactoryManager.GetProductFactory();
Product p = factory.Get(id);
在下面的示例中,我使用ODP.Net(Oracle数据源的最佳数据访问组件)为Product接口实现Oracle数据访问层。然后数据访问层如下所示:
<强> IProductFactory:强>
public interface IProductFactory: IEntityFactory
{
Product Get(string productId);
IList<Product> GetAll();
int GetAllCount();
}
<强>产品:强>
public class Product : IEntity<Product>
{
public string ProductId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
#region IEntity<Product> Members
public Product MapData(System.Data.IDataReader reader)
{
return new Product
{
Name = reader["name"] as string,
Description = reader["description"] as string
};
}
#endregion
}
Oracle ProductFactory
public class ProductFactory : EntityFactory, IProductFactory
{
#region IProductFactory Members
public Product Get(string productId)
{
Product p = null;
using (OracleConnection conn = new OracleConnection(ConnectionString))
{
using (OracleCommand cmd = new OracleCommand())
{
cmd.CommandText = "select * from product where productId = :productId";
cmd.Parameters.Add("productId", productId);
using (IDataReader reader = cmd.ExecuteReader())
{
p = new Product();
p.MapData(reader);
}
}
}
return p;
}
public IList<Product> GetAll()
{
throw new NotImplementedException();
}
public int GetAllCount()
{
throw new NotImplementedException();
}
#endregion
}
答案 1 :(得分:0)
ADO.NET可用于通过ODBC连接连接到任何数据库。我们几乎可以使用ADO.NET(PostgreSQL,Oracle,MySQL,SQL Server等),它是大多数ORM产品的核心数据库访问方法。
答案 2 :(得分:0)
我建议您通过接口抽象出DAL(数据访问层),然后为每种类型的数据库创建一个DAL。
如果您为DAL私有代码使用基于提供程序的ORM(例如Entity Framework),您的任务将变得更加轻松。
对于公共部分,你所要做的就是实现接口合同,你没事。