2009-06-12 5 views
1

У нас есть 3 поставщика баз данных, которые мы используем для подключения к нашим базам данных: DB2, MS SQL и Interbase. Я хотел бы создать единый общий класс оболочки базы данных, который можно использовать для общения со всеми тремя, просто передав правильную строку соединения, имя пользователя, пароль и требуемый провайдер.Возможно ли создать общий класс базы данных в VB.NET?

Я не хочу добавлять ссылки и импортировать все три поставщика в классе базы данных. Это возможно?

Я сделал это раньше в Java, используя функцию Class.forName().

ответ

3

Существует abstract factory встроенный в .NET 2.0 или более поздней версии, пример его использования будет:

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

Вы можете использовать фреймворк 3.5 sp1?

если да, то вы должны смотреть на Linq к Entity

3

Если вы не хотите, чтобы ссылки на отдельных поставщиков в вашем приложении, вам нужно будет справиться с этим немного по-другому.

Есть два основных варианта, которые я вижу - первым (и самым простым) было бы использование инфраструктуры инъекций зависимостей, чтобы просто подключить соответствующий провайдер во время выполнения. Это просто, чисто и хорошо работает.

Вы могли бы сделать это сами без этого. Просто создайте базовый класс общего назначения, который предоставляет интерфейс, и для каждого провайдера создайте отдельную сборку (поэтому ссылки разделены), которая реализует этот базовый класс. Затем вы можете использовать Activator.CreateInstance для создания экземпляра соответствующего типа во время выполнения.

1

Для расширения Ответ Патрика Макдональда, вы можете сохранить имя поставщика и строку подключения в разделе 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> 
Смежные вопросы