Совместная работа 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, разумеется 🙂