Совместная работа ADO.NET, ADODB и OLEDB.

Привет всем.

На сайт IBProvider-а выложен новый пример на C#, с демонстрацией взаимодействия трех технологий: ADO.NET, ADODB, OLEDB. Достаточно короткий и простой:

Проект этого примера можно найти в дистрибутиве ADO.NET провайдера.

using(var oledbCn=new OleDbConnection(c_cn_str))
{
 oledbCn.Open(); /*1*/

 dynamic adodbCn=com_lib.object_utils.CreateInstance
                  ("ADODB.Connection",
                   com_lib.ClsCtxCode.CLSCTX_INPROC_SERVER).GetObject();

 adodb_lib.AdoDbConstructor.attach_adodb_cn_to_oledb_session
  (adodbCn,
   oledbCn.GetNativeSession()); /*2*/

 adodbCn.BeginTrans(); /*3*/

 dynamic genMng=com_lib.object_utils.CreateInstance
                  ("LCPI.IBP.Samples.IBGenManager.1",
                   com_lib.ClsCtxCode.CLSCTX_INPROC_SERVER).GetObject();

 genMng.Connection=adodbCn; /*4*/

 Console.WriteLine("[GenMng] Generate ID: {0}",
                   genMng.GenID("CUST_NO_GEN")); /*5*/
  
 adodbCn.CommitTrans(); /*6*/
}//using oledbCn
  1. ADO.NET провайдер создает подключение к базе данных
  2. Подключаем ADODB к ADO.NET
  3. ADODB инициирует транзакцию в этом подключении
  4. Создаем компонент IBGenManager и подключаем его к ADODB
  5. IBGenManager запрашивает и возвращает новый идентификатор
  6. ADODB завершает транзакцию

IBGenManager — это простенький ActiveX компонент для работы с генераторами базы данных. Он написан на C++ и работает с OLEDB провайдером через библиотеку на C++. От ADODB-подключения ему нужен только указатель на низкоуровневый OLEDB-объект (сессию).

Исходный код и готовые модули этой компоненты есть в дистрибутивах IBProvider-a — см. каталог «Program Files\LCPI\IBProvider.3\Samples\oledb\sample_com_object».

Собственно говоря, подобный компонент можно написать на чем угодно — хоть на Delphi, хоть на Visual Basic. Или на C#.

У меня была еще мысль создавать и выполнять IBGenManager внутри VB-скрипта (я даже готовый компонент на nuget.org нашел — ActiveScriptEngine), но решил что это будет уже перебор. Кстати, IBGenManager можно было написать на VBScript и вызывать его из C#.

В целом, конечно, это повторение пройденного — подобные вещи (за исключением ADO.NET) были доступны (и активно эксплуатировались) еще в 2001 году. Во времена Firebird 0.9.4, если мне не изменяет память.

Сейчас же все это (включая ADO.NET провайдер) всего лишь (с особым цинизмом) доведенные до ума идеи тех лет — «написанное однажды будет работать везде и всегда». На Windows, разумеется 🙂

Leave a Comment