Spec-Zone.ru › MySQL Connectors 1.0

5.9 Использование классов-перехватчиков Connector/NET

Перехватчик — это шаблон проектирования программного обеспечения, обеспечивающий прозрачный способ расширения или изменения некоторых аспектов программы, аналогично пользовательскому выходу. Перекомпиляция не требуется. В MySQL Connector/NET перехватчики включаются и выключаются путем обновления строки подключения для ссылки на разные наборы классов перехватчиков, которые вы инициализируете.

Примечание

Классы и методы, представленные в этом разделе, не применяются к приложениям Connector/NET, разработанным с помощью платформы .NET Core 1.1.

Connector/NET включает следующие классы перехватчиков:

  • Класс BaseCommandInterceptor позволяет выполнять дополнительные операции, когда программа выполняет SQL-команду. Например, вы можете проанализировать SQL-запрос для целей ведения журнала или отладки, заменить свой собственный результат для реализации механизма кэширования и т. д. В зависимости от использования ваш код может дополнить SQL-команду или полностью заменить её.

    Класс BaseCommandInterceptor имеет эти методы, которые вы можете переопределить:

    public virtual bool ExecuteScalar(string sql, ref object returnValue);
    public virtual bool ExecuteNonQuery(string sql, ref int returnValue);
    public virtual bool ExecuteReader(string sql, CommandBehavior behavior, ref MySqlDataReader returnValue);
    public virtual void Init(MySqlConnection connection);
    

    Если ваш перехватчик переопределяет один из методов Execute..., установите параметр вывода returnValue и верните true, если вы обработать событие, или false, если вы не обработали событие. SQL-команда обрабатывается обычно только тогда, когда все перехватчики команд возвращают false.

    Подключение, переданное методу Init, — это подключение, которое подключено к этому перехватчику.

  • Класс BaseExceptionInterceptor позволяет выполнять дополнительные операции, когда программа сталкивается с SQL-исключением. Механизм перехвата исключений смоделирован по аналогии с Connector/J. Вы можете закодировать класс-перехватчик и подключить его к существующей программе без перекомпиляции и перехватывать исключения при их создании. Затем вы можете изменить тип исключения и, при необходимости, добавить к нему информацию. Эта возможность позволяет включать и отключать код ведения журнала и отладки без жёсткого кодирования чего-либо в приложении. Этот метод относится к исключениям, возникающим на уровне SQL, а не к ошибкам на более низком уровне системы или ввода/вывода.

    Сначала вы разрабатываете перехватчик исключений, создав подкласс класса BaseExceptionInterceptor. Вы должны переопределить метод InterceptException(). Вы также можете переопределить метод Init() для выполнения некоторой одноразовой инициализации.

    Каждый перехватчик исключений имеет 2 метода:

    public abstract Exception InterceptException(Exception exception,
      MySqlConnection connection);
    public virtual void Init(MySqlConnection connection);
    

    Подключение, переданное методу Init(), — это подключение, которое подключено к этому перехватчику.

    Каждый перехватчик должен переопределить метод InterceptException и вернуть исключение. Он может вернуть переданное исключение или обернуть его в новое исключение. В настоящее время мы не предоставляем возможность подавления исключения.

Ниже приведены примеры использования FQN (полного квалифицированного имени) в строке подключения:

MySqlConnection c1 = new MySqlConnection(@"server=localhost;pooling=false;
commandinterceptors=CommandApp.MyCommandInterceptor,CommandApp");

MySqlConnection c2 = new MySqlConnection(@"server=localhost;pooling=false;
exceptioninterceptors=ExceptionStackTraceTest.MyExceptionInterceptor,ExceptionStackTraceTest");

В этом примере перехватчик команды называется CommandApp.MyCommandInterceptor и находится в сборке CommandApp. Перехватчик исключений называется ExceptionStackTraceTest.MyExceptionInterceptor и находится в сборке ExceptionStackTraceTest.

Для сокращения строки подключения вы можете зарегистрировать свои перехватчики исключений в файле app.config или web.config следующим образом:

<configSections>
<section name="MySQL" type="MySql.Data.MySqlClient.MySqlConfiguration,MySql.Data"/>
</configSections>
<MySQL>
<CommandInterceptors>
  <add name="myC" type="CommandApp.MyCommandInterceptor,CommandApp" />
</CommandInterceptors>
</MySQL>

<configSections>
<section name="MySQL" type="MySql.Data.MySqlClient.MySqlConfiguration,
MySql.Data"/>
</configSections>
<MySQL>
<ExceptionInterceptors>
  <add name="myE"
  type="ExceptionStackTraceTest.MyExceptionInterceptor,ExceptionStackTraceTest" />
</ExceptionInterceptors>
</MySQL>

После этого ваши строки подключения могут выглядеть следующим образом:

MySqlConnection c1 = new MySqlConnection(@"server=localhost;pooling=false;
commandinterceptors=myC");

MySqlConnection c2 = new MySqlConnection(@"server=localhost;pooling=false;
exceptioninterceptors=myE");

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-net-en/connector-net-interceptors.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API