Новая сборка .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 провайдера. Но только лучше. Без спотыканий.
Пример создал потому что иногда хочется самому поиграть в свои кубики 🙂