是否可以在VB.NET中创建一个通用的数据库类?

时间:2009-06-12 16:17:33

标签: vb.net generics wrapper

我们有3个数据库提供程序用于连接到我们的数据库:DB2,MS SQL和Interbase。我想创建一个通用的数据库包装类,只需传入正确的连接字符串,用户名,密码和所需的提供程序,就可以用来与所有三个进行通信。

我不想在数据库类中添加引用并导入所有三个提供程序。这可能吗?

我之前在Java中使用Class.forName()函数完成了这项工作。

4 个答案:

答案 0 :(得分:3)

如果您不想在应用程序中引用各个提供程序,则需要稍微改变一下。

我看到有两个主要选项 - 第一个(也是最简单的)是使用依赖注入框架在运行时插入适当的提供程序。这很简单,干净,效果很好。

但是,如果没有它,你可以自己做。只需创建一个提供接口的通用基类,并为每个提供程序创建一个单独的程序集(因此引用是分开的)来实现此基类。然后,您可以使用Activator.CreateInstance在运行时创建适当类型的实例。

答案 1 :(得分:3)

.NET 2.0或更高版本中内置了abstract factory,其使用示例如下:

Dim factory As System.Data.Common.DbProviderFactory
factory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlClient")

Dim conn As System.Data.Common.DbConnection = factory.CreateConnection()
conn.ConnectionString = "connectionString"
conn.Open()

DbProviderFactory上有一些方法,比如CreateCommand,CreateDataAdapter等。

答案 2 :(得分:1)

要扩展Patrick McDonald的答案,您可以将提供者名称和连接字符串存储在< connectionStrings>中。应用程序配置文件的一部分。然后,您不需要在应用程序中对提供程序进行硬编码:

ConnectionStringSettings c = ConfigurationManager.ConnectionStrings["MyConnectionName"];
if (c != null)
{
   DbProviderFactory factory = DbProviderFactories.GetFactory(c.ProviderName);
   IDbConnection connection = factory.CreateConnection();
   connection.ConnectionString = c.ConnectionString;
   ...
}

您的应用程序配置文件包含connectionStrings部分,如:

<connectionStrings>
  <add name="MyConnectionName" providerName="System.Data.SqlClient" connectionString="Data Source=serverName;Initial Catalog=DBName;Integrated Security=True"/>
</connectionStrings>

答案 3 :(得分:0)

你能使用framework 3.5 sp1吗?

如果是,你应该看看Linq to Entity