IBProvider v1.6.1.185
-
Поддержка DBTYPE_NUMERIC.
- Реализована конвертация между другими типами данных (numeric/string/VARIANT)
- Типы данных InterBase NUMERIC/DECIMAL теперь представляются как DBTYPE_NUMERIC
- Корректное представление TIMESTAMP (IB6) и DATE (IB4/5). Устранено усечение десятых долей миллисекунд. Для этих дат используется DBTYPE_TIMESTAMP.
- Приведены к требованиям спецификации значения PRECISION и SCALE в описании колонок и параметров.
- Возможность указания всех свойств подключения через значение свойства «Extended Properties».
- Новое информационное свойство «Provider Friendly Name».
- Новое свойство инициализации и набора рядов «truncate_char». По умолчанию установлено в true.
- Новый набор информационной схемы TABLES_INFO.
- Устранены недочеты в формировании содержимого информационных схем.
Единственным серьезным изменением является включение поддержки DB_NUMERIC, поскольку с этим связан большой объем кода, связанного с конвертированием. Мы настоятельно рекомендуем самостоятельно проверить достоверность получаемых и передаваемых NUMERIC и DECIMAL типов данных. Несмотря на тщательную проверку и тестирование кода с нашей стороны, вам лучше перестраховаться. Официальные пользователи могут самостоятельно проверить код, поскольку он является общим с С++ клиентом к OLE DB провайдерам.
Использование IBProvider'a как связанного сервера MSSQL.
Начиная с версии 1.6.1, IBProvider может быть использован как поставщик информации для использования в Microsoft Distributed Query. В процессе тестирования были выявлены следующие вещи:
- При регистрации источника данных желательно разрешать загрузку в процесс сервера («Allow InProcess»). В противном случае провайдер будет запускаться в отдельном процессе. У нас получалось работать таким образом только зарегистрировавшись в системе как администратор;
- Строка подключения должна выглядеть таким образом: «…;free_threading=true;truncate_char=false;…» Это указывает провайдеру, что он должен объявить о своей поддержке «free threading» и запрещает ему усечение хвостовых пробелов, поскольку MSSQL сверяет полученные данные с описанием колонок. В строке подключения не нужно указывать «auto_commit=true»;
- Перед выполнением запроса нужно выполнить команду begin transaction Это приводит к тому, что источник данных IBProvider'a будет подключен к координатору распределенных транзакций. В противном случае будет происходить уже всем известная ошибка: «Automatic transaction is disabled»;
- При работе с базой данных 3 диалекта необходимо правильно указывать верхний и нижний регистр, поскольку MSSQL начинает использовать «» при передаче имен. При подключении к IB4/5 или явном указании «dialect=1» регистр можно игнорировать;
- Диапазон дат IB и MSSQL не совпадает. Поэтому проверьте, что в таблицах, участвующих в запросах, нет дат ниже 1 января 1753 года;
- В запросах нельзя использовать таблицы, содержащие массивы. MSSQL их не понимает;
- Поскольку IBProvider в настоящий момент не реализует поддержку обновляемых множеств, выполнение запросов модификации данных (insert/update/delete) пока невозможно. По крайней мере, у нас выполнять эти операции не получалось
Тестирование осуществлялось на MSSQL 7.0.623.