2

我们需要我们正在构建的应用程序与数据库无关。特别是,我需要它能够与 SQL Server、Oracle 和 MySQL 一起工作。将来,可能还会将其他数据库供应商添加到列表中。当然,要使用的任何数据库都将具有相同的模式。

为了构建一个原型来演示接口,我们将模式加载到 SQL Server DB 中,然后为该数据库生成 DataSet 和 TableAdapter。由于数据集是由数据库的特定实例生成的,我怀疑生成的 DataSet 和 TableAdapter 不是独立于供应商的。此外,我什至不确定它们是否可以用于另一个 SQL Server 数据库实例。

我的问题是:有没有办法将相同的自动生成的 DataSet 和 TableAdapter 与不同的数据库(可能还有供应商)一起使用?

干杯,

马科斯

4

2 回答 2

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 提到的)、SubsonicMicrosoft Enterprise Library Data Access Application Block等数据库框架。

于 2009-06-19T13:00:51.163 回答
0

我认为你走错了路。我会选择NHibernate

我每天都使用它,它与数据库无关。

于 2009-06-19T12:40:41.453 回答