2009-06-12 56 views
1

我們有3個數據庫提供者用於連接我們的數據庫:DB2,MS SQL和Interbase。我想創建一個通用數據庫包裝類,只需傳入正確的連接字符串,用戶名,密碼和所需的提供程序即可用於與所有三個類型進行通信。是否可以在VB.NET中創建一個通用的數據庫類?

我不想在數據庫類中添加引用並導入所有三個提供程序。這可能嗎?

我之前在Java中使用Class.forName()函數完成了此操作。

回答

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方法等

0

你可以使用framework 3.5 sp1嗎?

如果是的話,你應該看看LINQ到實體

3

如果你不希望有您的應用程序的個人提供參考,則需要以不同方式處理這一點。

我看到有兩個主要選項 - 第一個(也是最簡單的)是使用依賴注入框架在運行時插入相應的提供程序。這很簡單,乾淨,並且運作良好。

儘管如此,你也可以自己做。只需創建一個提供接口的通用基類,併爲每個提供者創建一個實現此基類的單獨程序集(以便引用是分開的)。然後您可以使用Activator.CreateInstance在運行時創建適當類型的實例。

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> 
相關問題