Дата публикации: 08.06.2012

Десятки новых возможностей для работы c Firebird и InterBase в .Net Framework

Если вы до этого работали с Firebird или InterBase через стандартный .Net провайдер для OLE DB (System.Data.OleDb), то наверняка сталкивались с подобными проблемами:

  • Необходимость добавлять ВСЕ параметры вручную.
    Даже если OleDb провайдер поддерживает генерацию параметров для команд, .Net провайдер её не использует, и вы как программист, были вынуждены делать работу самостоятельно.
  • Отсутствие поддержки именованных параметров.
    Хотя они номинально есть, но по факту их использование связано с целым рядом сложностей (порядок добавления параметра в коллекцию и т.д.)
  • Невозможность использования нескольких DataReader-объектов одновременно (MARS-технология).
  • Выполнение SQL-скриптов, содержащих несколько SQL-инструкций в тексте команды.
  • Это далеко не полный список неудобств, с которыми приходилось мириться .Net-разработчикам.

Теперь все по-другому – это принципиально новый ADO.NET Data Provider for OLE DB

В течение всего года мы вели активную разработку нового проекта «LCPI ADO.NET Data Provider for OLE DB» для всех программистов, которые вынуждены использовать недоделанные компоненты для работы с Firebird и InterBase в .Net Framework. С сегодняшнего дня этот управляемый провайдер входит в состав нашего стандартного дистрибутива IBProvider.

Это пока всего лишь Beta-версия с ограниченными возможностями

Пока не реализованы OleDb-схемы, OleDbDataAdapter, OleDbCommandBuilder, а так же интерфейсы для Entity Framework. Если вы фанат генераторов кода и визуальных редакторов, то это конечно ограничивает функциональность.

Мы знаем, что много наших коллег принципиально не используют генераторы и предпочитают самостоятельно кодировать всю логику работы с базой данных.

Для вас все это доступно уже сейчас и вы можете полноценно использовать для Firebird, InterBase и .Net Framework следующие возможности:

  1. Автоматическую генерацию параметров команд, которые больше не нужно добавлять прописывать вручную,
  2. Именованные и неименованные параметры, IN, OUT и IN-OUT параметры,
  3. Несколько команд с параметрами в одном тексте (SQL-скрипты),
  4. Пул подключений и пул команд, которые сделают ваши программы еще быстрее,
  5. Вложенные («nested_trans=true») и распределенные (TransactionScope, EnlistTransaction) транзакции,
  6. Все типы данных, включая GUID, TIME (3 диалект), DATE (3 диалект) и многомерные массивы,
  7. MARS-технологию, которая позволяет одновременно работать с несколькими активными объектами DataReader,
  8. И ExecuteScalar теперь действительно загружает одно значение, а не вcю запись 🙂

Все эти возможности реализованы в следующих классах пространства имен lcpi.data.oledb:

  • OleDbConnectionStringBuilder
  • OleDbConnection
  • OleDbTransaction
  • OleDbCommand
  • OleDbParameter
  • OleDbParameterCollection
  • OleDbDataReader
  • OleDbException

Хотя наш новый OLE DB Provider для .Net работает через стандартные интерфейсы OleDb, пока он поддерживает только LCPI.IBProvider.3 для Firebird и InterBase, так как именно в нем эти интерфейсы реализованы на 100%.

Если вы разработчик OLE DB-провайдера, для других баз данных, напишите нам, мы вышлем спецификацию того, что нужно, чтобы ваш провайдер смог полноценно работать в .Net Framework через наш OLE DB Provider для .Net

Что вы можете делать с новым ADO.NET провайдером уже сейчас:

//Use
// - Firebird SQL Server v2.5
// - LCPI.IBProvider v3.11.1
// - LCPI ADO.NET Data Provider for OLE DB
using System;
using System.Data;
using xdb=lcpi.data.oledb;

class Program
{
 static void Main(string[] args)
 {
  const string c_cn_str
   ="provider=LCPI.IBProvider.3;"
   +"location=home2:d:\\database\\employee.fdb;"
   +"user id=SYSDBA;"
   +"password=masterkey;";

  try
  {
   using(var cn=new xdb.OleDbConnection(c_cn_str))
   {
    cn.Open();

    using(var tr=cn.BeginTransaction(IsolationLevel.RepeatableRead))
    {
     using(var cmd=new xdb.OleDbCommand("",cn,tr))
     {
      cmd.CommandText="select EMP_NO,FULL_NAME from EMPLOYEE where FIRST_NAME=:x";

      cmd["x"].Value="Leslie"; //set params without manual addition.

      using(var reader=cmd.ExecuteReader())
      {
       cmd.CommandText="update EMPLOYEE set FIRST_NAME=UPPER(FIRST_NAME) "
                      +"where EMP_NO=:id RETURNING NEW.FIRST_NAME;";

       cmd.Parameters.Refresh(); // recreate params without creating new command

       while(reader.Read())
       {
        cmd.Parameters["id"].Value=reader["EMP_NO"];

        cmd.ExecuteNonQuery();

        Console.WriteLine("Update \"{0}\" emp_no={1}. New FIRST_NAME=\"{2}\"",
                          reader["FULL_NAME"],
                          reader["EMP_NO"],
                          cmd["FIRST_NAME"].Value);
       }//while
      }//using reader
     }//using cmd

     tr.Rollback();
    }//using tr
   }//using cn
  }
  catch(Exception exc)
  {
   Console.WriteLine("ERROR: [{0}] - {1}",exc.Source,exc.Message);
  }
 }//Main
};//class Program

Результат работы:

Результат работы

Уже 3 800 доказательств надежности нового ADO.NET провайдера

Скажите, разве можно говорить о надежности компонент доступа, когда все тестирование сводится к сбору критических ошибок от пользователей и их устранению в авральном режиме?

Вы доверите свои важные данные таким компонентам и какова цена ошибки?

В новом проекте уже реализовано более 3 800 различных автоматических тестов на основе «NUnit Framework». Мы будем досконально проверять КАЖДЫЙ релиз. Все тесты, входят в состав дистрибутива, и вы можете убедиться в надежности лично.

Что еще было сделано, для того, чтобы работа с данными стала еще надежнее:

  1. Локализация сообщений об ошибках. Реализованы русские и английские шаблоны сообщений.
  2. Агрессивное управление временем жизни объектов. Не допускаются вызовы методов у объекта после вызова Dispose. Отложенное выполнение Dispose до завершения всех текущих вызовов методов объекта.
  3. Повсеместное использование CER, для предотвращения утечек ресурсов.
  4. Реализована поддержка многопоточных программ.
  5. Собственная реализация управления COM-объектами (на базе SafeHandle).
  6. Унифицированная поддержка 32-битных и 64-битных платформ.

Сейчас самое время скачать и установить новый IBProvider и LCPI ADO.NET Data Provider for OLE DB

Если вам необходимо надежное, быстрое и самое функциональное решение для работы с базами данных Firebird и InterBase в .Net Framework, скачивайте и устанавливайте новый комплект прямо сейчас:

Поскольку разработка коммерческая, мы можем себе позволить оперативно(!) реагировать на все запросы пользователей и наращивать необходимую вам функциональность с каждым релизом, которые, кстати говоря, выходят очень часто, так как:

  • Тестирование новых версий для нас не бесконечный кошмар и исправление ошибок, а обычная осознанная работа, часть из которой проводится в автоматическом режиме.
  • Масштабируемая архитектура позволяет не тратить время на переписывание кода с нуля. Причем независимо от того необходимо ли нам добавить новую серьезную функциональность или незначительную мелочь.

Поэтому частые релизы с вашими новыми функциями это норма, а не волшебство. От вас только требуется сообщить нам на ibprovider@ibprovider.com о том, чего вам не хватает, а остальное мы берем на себя.


Дата публикации: 08.06.2012. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт https://www.ibprovider.com/rus обязательна.