我们需要构建的应用程序与数据库无关。特别是,我需要它能够使用SQL Server,Oracle和MySQL。将来,可能会将其他数据库供应商添加到列表中。当然,无论使用什么数据库都将使用相同的模式。
为了构建演示接口的原型,我们在SQL Server DB中加载了模式,然后为该数据库生成了DataSet和TableAdapter。由于数据集是由数据库的特定实例生成的,我怀疑生成的DataSet和TableAdapter不是独立于供应商的。此外,我甚至不确定它们是否可以用于另一个SQL Server数据库实例。
我的问题是: 有没有办法将不同的数据库(可能还有供应商)使用相同的自动生成的DataSet和TableAdapter?
干杯,
马科斯
答案 0 :(得分:2)
通常,如果您针对System.Data.Common命名空间开发数据库代码,它将尽可能不可知。但是,有很多警告,因为每个数据库提供程序都有自己特定的实现级别细节,与其他部分不同。
使用System.Data.Common的数据库无关方法的示例如下所示:
var factory = DbProviderFactories.GetFactory("My Provider Name");
using (var connection = factory.CreateConnection())
{
connection.ConnectionString = "My Connection String";
connection.Open();
var cmd = factory.CreateCommand();
cmd.CommandText = "My Command Text";
cmd.Connection = connection;
var adapter = factory.CreateDataAdapter();
adapter.SelectCommand = cmd;
var dataset = new DataSet();
adapter.Fill(dataset);
// ...
}
只需更改第一行即可切换数据库提供程序,其余代码几乎可以保持不变。
这种方法使用了大量的手工编码。您可以考虑使用像NHibernate这样的数据库框架(如David Basarab所述),Subsonic或Microsoft Enterprise Library Data Access Application Block等等。
答案 1 :(得分:0)
我认为你走错了路。我会选择NHibernate
我每天都使用它,它与数据库无关。