一般来说,如果您针对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等数据库框架。