Руководство по работе с БД Firebird с использованием библиотеки ADO .Net 2.0


Управляющие последовательности ODBC


Управляющие последовательности позволяют преобразовывать текст запроса в процессе выполнения. Последовательность включается в текст запроса в фигурных скобках. Например {fn CURDATE} – выражение будет преобразовано в значение серверного времени.

В ODBC определены управляющие последовательности для следующих характеристик:

  • Работа со временем и датами
  • Функции преобразования типов
  • Предикат LIKE
  • OUTER JOIN
  • Вызовы хранимых процедур

Данное расширение активно используется такими инструментами, как MS SQL Server, Crystal Reports, различные OLAP средства и их поддержка со стороны Ole Db провайдера обеспечивает возможность их совместного использования.

Для того, чтобы включить поддержку ODBC расширений в IBProvider, необходимо установить свойство инициализации support_odbc_call = true. По умолчанию поддержка отключена.

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

  • Функции для работы с датами и временем: CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURDATE, CURTIME, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, EXTRACT, HOUR, MINUTE, MONTH, MONTHNAME, NOW, QUARTER, SECOND, WEEK, YEAR.
  • Конвертирование данных: CONVERT
  • Системные функции: USER
  • Строковые функции: UCASE

Следующий пример демонстрирует применение управляющих последовательностей в тексте SQL запросов:

public void ODBCQueriesTest() { OleDbConnectionStringBuilder builder = ConnectionProvider.GetConnectionStringBuilderFromUDL(); builder.Provider = "LCPI.IBProvider.2"; builder.Add("support_odbc_query","true");

OleDbConnection con = new OleDbConnection(builder.ToString()); con.Open(); OleDbTransaction trans = con.BeginTransaction();

//select current day name OleDbCommand cmd = new OleDbCommand( "select " + "{fn dayname({fn now()})} as DAY_NAME," + "{fn dayofweek({fn now()})} as DAY_OF_WEEK," + "{fn dayofmonth({fn now()})} as DAY_OF_MONTH," + "{fn dayofyear({fn now()})} as DAY_OF_YEAR " + "from RDB$DATABASE", con, trans);

using (OleDbDataReader rdr = cmd.ExecuteReader()) if (rdr.Read()) for (int i = 0; i < rdr.FieldCount; i++) Console.WriteLine(rdr.GetName(i) + ": " + rdr[i].ToString());

trans.Commit(); con.Close(); }

На момент написания статьи ODBC запросы поддерживались в 1-й и 2-й версии IBProvider и ещё не были реализованы в третьей. Так что для использования этой возможности необходимо указывать в строке подключения Provider = "LCPI.IBProvider.2"

За более подробной информацией по использованию управляющих последовательностей ODBC советую вам обратиться к документу «ODBC Programmer’s Reference» и изучить раздел «Escape Characters in ODBC».




Начало  Назад  Вперед