Новая сборка .NET провайдера с поддержкой схем [build 1430].

Привет всем.

С сайта IBProvider-a можно скачать дистрибутив с обновленным .NET провайдером, в котором реализована поддержка схем метаданных.

Схемы можно получать из OleDbConnection двумя способами:

1. Через метод GetOleDbSchemaTable. Здесь можно запросить любую схему, которую поддерживает IBProvider. Помимо «реальных» схем, можно еще запросить «виртуальные»:

  • SchemaGuids. Эта схема описывает множество всех схем, которые можно получать через GetOleDbSchemaTable.
  • DbInfoKeywords. Эта схема вернет список специфических ключевых слов источника данных. Данные запрашиваются у OLEDB провайдера через интерфейс IDBInfo::GetKeywords.
  • DbInfoLiterals. Эта схема возвращает сведения о литерах источника данных (разделители, кавычки, максимальные размеры имен и так далее). Данные запрашиваются у OLEDB провайдера через интерфейс IDBInfo::GetLiteralInfo.

Все как у стандартного OLEDB.NET провайдера, за исключением:

  • SchemaGuids включает в себя и «виртуальные» схемы, которые создает .NET провайдер.
  • SchemaGuids поддерживает ограничение на колонку Schema. Это упрощает операцию проверки поддержки OLEDB схемы OLEDB провайдером/.NET провайдером.

2. Через метод GetSchema. Реализована поддержка следующих схем:

Виртуальные: MetaDataCollections, Restrictions, DataTypes, ReservedWords, DataSourceInformation.

Реальные: CharacterSets, Collations, Tables, Views, Columns, Procedures, ProcedureParameters, ProcedureColumns, Indexes. Есть еще поддержка для схемы Catalogs, но она не поддерживается IBProvider-ом.

Все как у стандартного OLEDB.NET провайдера. За исключением:

  • MetaDataCollections поддерживает ограничение для колонки CollectionName.
  • Restrictions поддерживает ограничения для колонок CollectionName, RestrictionName.
  • При отображении ограничений OLEDB-схем на записи в Restrictions учитывается наличие поддержки ограничений OLEDB-провайдером (колонка RestrictionSupport из схемы SchemaGuids). To есть для схемы Tables ограничения будут: TABLE_NAME, TABLE_TYPE. А не: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE. Потому что IBProvider не поддерживает ограничения для колонок TABLE_CATALOG и TABLE_SCHEMA.
  • DataSourceInformation, в случае использования IBProvider-а, сообщает о поддержке именованных параметров.
  • DataSourceInformation, в случае использования Firebird/Interbase/Yaffil, публикует нормализованную версию сервера и другие сведения, которые пропускаются в стандартном OLEDB.NET провайдере.

Итого, в целом, это законченная часть проекта. Но которую можно будет расширять, в случае необходимости. У меня было сильное желание публиковать через DataSourceInformation следующую информацию:

  • Дескриптор OLEDB провайдера
  • Версия OLEDB провайдера
  • Имя DLL OLEDB провайдера
  • Версию ODS базы данных
  • Диалект базы данных
  • Имя серверного клиента
  • Версию серверного клиента

Но решил пока воздержаться — сначала надо переварить полученный опыт.

Кроме того, в дистрибутиве появился новый пример, демонстрирующий:

  • Проверку имени и версии сервера базы данных.
  • Создание пакета с процедурами.
  • Ленивый вызов процедур из пакета.

Ленивый, потому что мне было лень указывать параметры в тексте запроса (1) и указывать их описания .NET провайдеру (2).

Первую задачу решил IBProvider. Ему это разрешили в строке подключения — «exec_sp_named_param=true».

А вторую задачу выполнил .NET провайдер. Точно так же, как это делал старый добрый ADODB — через неявное получение описаний параметров из OLEDB провайдера. Но только лучше. Без спотыканий.

Пример создал потому что иногда хочется самому поиграть в свои кубики 🙂

Leave a Comment