назад к списку статей

DB2 .Net Способы подключения к базе данных

DB2 .NetЦель данной статьи: показать основные способы взаимодействия .Net приложений с СУБД IBM DB2.

DB2 – система управления реляционными базами данных, разработанная компанией IBM. Кстати, язык SQL был разработан именно IBM, правда, первым в коммерческих целях первым его стал использовать Oracle.

Для работы с IBM DB2 на машине должен быть установлен клиент, либо серверная часть DB2. Есть отличная бесплатная версия DB2 Express-C, у которой нет ограничений на размер баз данных (привет, Microsoft!).

Мы рассмотрим два способа подключения к DB2 .Net в Visual Studio:

  • через IBM Data Server Provider for .NET (библиотека IBM.Data.DB2.dll);
  • через OleDb Provider for .NET (драйвер IBMDADB2).

1. DB2 .Net через библиотеку IBM.Data.DB2.dll

Я поставил этот способ работы с базой в .Net приложениях на первое место только потому, что его официально рекомендует компания IBM.

Внутри IBM.Data.DB2.dll реализован драйвер для .Net приложений, поддерживающий интерфейс ADO.NET. IBM Data Server Provider обеспечивает высокопроизводительный, безопасный доступ к базам данных IBM.

Покажем использование данного способа на конкретном примере. Получим список идентификаторов из таблицы MYTABLE схемы DBUSER. У нас должна быть создана база данных MYBASE, пользователь db2admin с паролем db2admin должен иметь права на чтение таблицы MYTABLE.

Добавим в проект сборку C:\Program Files\IBM\SQLLIB\BIN\netf20\IBM.Data.DB2.dll (название каталога netf20 может отличаться в зависимости от версии DB2).

Вот пример работы с базой DB2 с помощью IBM.Data.DB2.dll на языке C#:

using IBM.Data.DB2;
private void SelectIdFromDB2()
{
  List<Int32> Ids = new List<Int32>();
  try
  {
    string query = "SELECT id FROM DBUSER.MYTABLE;";
    using (DB2Connection connection = 
      new DB2Connection("Database=MYBASE;server=localhost;Uid=db2admin;Pwd=
db2admin;"))
    {
      connection.Open();
      DB2Command command = connection.CreateCommand();
      command.CommandText = query;
      DB2DataReader reader = command.ExecuteReader();
      while (reader.Read())
        Ids.Add(Int32.Parse(reader["ID"].ToString()));
      reader.Close();
    }
  }
  catch (Exception ex)
  {
    Ids = null;
  }
  finally
  {
    return Ids;
  }
}

Примечание: при работе данным провайдером был замечен очень неприятный баг: приложение, написанное с использованием IBM.Data.DB2.dll версии 8.2, не работает под DB2 версии 9.7, и наоборот. Т.е. нельзя использовать одну и ту же библиотеку IBM.Data.DB2.dll для разных версий DB2.

2. DB2 .Net через OleDb провайдер

OLE DB. NET поставщик данных использует DB2 OLE DB Driver, который прописывается в строке подключения к базе данных, как IBMDADB2. На официальном сайте IBM написано, что этот поставщик данных не протестирован, и что пользователям рекомендуется использовать IBM Data Server Provider for .NET, т.е. библиотеку IBM.Data.DB2.dll.

Однако, из-за вышеописанной «особенности» IBM.Data.DB2.dll, я предпочитаю именно этот способ подключения. К тому же не нужно дополнительно ничего подключать к проекту, используется стандартный OLE DB провайдер из сборки System.Data.OleDb.

Приведу пример работы с OLE DB провайдером для той же задачи: получить список идентификаторов из таблицы MYTABLE схемы DBUSER. Обратите внимание: в строке подключения явно указывается драйвер IBMDADB2:

using System.Data.OleDb;
private void SelectIdFromDB2()
 {
  List<Int32> Ids = new List<Int32>();
  try
  {
    string query = "SELECT id FROM DBUSER.MYTABLE;";
    using(OleDbConnection connection =
new    OleDbConnection("Provider=IBMDADB2;Database=MYBASE;Hostname=localhost;
Protocol=TCPIP;Port=50000;Uid=db2admin;Pwd=db2admin;)
    {
      connection.Open();
      OleDbCommand command = connection.CreateCommand();
      command.CommandText = query;
      OleDbDataReader reader = command.ExecuteReader();
      while (reader.Read())
        Ids.Add(Int32.Parse(reader["id"].ToString()));
      reader.Close();
    }
  }
  catch (Exception ex)
  {
    Ids = null;
  }
  finally
  {
    return Ids;
  }
}

Заключение

Мы рассмотрели два способа работы с DB2 .Net в Visual Studio:

  • через библиотеку IBM.Data.DB2.dll;
  • через OleDb драйвер IBMDADB2.

Повторюсь, IBM Data Server Provider for .NET (библиотека IBM.Data.DB2.dll) крайне чувствителен к версии DB2. Например, если проект собирался с использованием библиотеки v8.2, то он не будет работать с IBM DB2 v9.7, и наоборот. Если вы предусматриваете в дальнейшем переход на более позднюю версию DB2, то лучше подключаться к базе через OLE DB провайдер.

Да, еще один принципиальный момент: приложение .Net не работает в x64-среде с IBM DB2 версии 8.2, просто IBM такую конфигурацию не поддерживает; Если нужно работать в x64 среде, придется ставить DB2 v.9.7 и выше.

Вам также может быть интересно:

Автоматическое резервное сохранение базы данных IBM DB2

назад к списку статей


I'mon Google+ .

Любой сложности ремонт квартир Нахимовский проспект сделает наш дизайнер.