Совместная работа 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
- ADO.NET провайдер создает подключение к базе данных
- Подключаем ADODB к ADO.NET
- ADODB инициирует транзакцию в этом подключении
- Создаем компонент IBGenManager и подключаем его к ADODB
- IBGenManager запрашивает и возвращает новый идентификатор
- 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, разумеется 🙂