Доступные версии документации

Cancel

Метод пытается отменить (по возможности) выполнение команды по текущему соединению.

Если в данный момент по соединению нет выполняющейся команды, то метод не выполняет никаких действий.

Вызов метода не гарантирует, что команда обязательно будет отменена. Её выполнение может завершиться еще до того, как начнется отмена команды. В таком случае исключение не генерируется.

Синтаксис
public abstract void Cancel();
Возвращаемое значение

Значение типа void.

Исключения

Отсутствуют.

Пример
// C#
using System;
using System.Data.LinterClient;
using System.Threading;

class CommandCancelSample
{
  static LinterDbConnection m_connection = null;
  static LinterDbCommand m_command = null;

  static void Main()
  {
    Thread waitThread = new Thread(new ThreadStart(Wait));
    Thread abortThread = new Thread(new ThreadStart(Abort));
    waitThread.Start();
    abortThread.IsBackground = true;
    abortThread.Start();
  }

  public static void Wait()
  {
    try
    {
      m_connection = new LinterDbConnection();
      m_connection.ConnectionString = "UserID=SYSTEM;Password=MANAGER";
      m_connection.Open();

      m_command = new LinterDbCommand();
      m_command.Connection = m_connection;
      m_command.CommandText = "create or replace event E";
      m_command.ExecuteNonQuery();

      Console.WriteLine("Ожидание события E...");
      m_command.CommandText = "wait event E";
      m_command.ExecuteNonQuery();
      Console.WriteLine("Событие произошло.");
    }
    catch (LinterSqlException ex)
    {
      Console.WriteLine(
        "Исключение ядра СУБД ЛИНТЕР \n" +
        "Текст сообщения: " + ex.Message + "\n" +
        "Код СУБД ЛИНТЕР: " + ex.Number + "\n" +
        "Код операционной системы: " + ex.LinterSysErrorCode + "\n");
    }
    catch (Exception ex)
    {
      Console.WriteLine(
        "Исключение ADO.NET провайдера \n" +
        "Тип ошибки: " + ex.GetType() + "\n" +
        "Сообщение: " + ex.Message + "\n");
    }
    finally
    {
      Console.WriteLine("Освобождение ресурсов.");
      if (m_connection != null)
      {
        m_connection.Close();
      }
      Console.WriteLine("Выполнение команды завершено.");
    }
  }

  public static void Abort()
  {
    Console.WriteLine("Чтобы отменить выполнение команды нажмите Esc.");
    do
    {
      if (Console.KeyAvailable)
      {
        if (Console.ReadKey(true).Key == ConsoleKey.Escape)
        {
          if (m_command != null)
          {
            m_command.Cancel();
            Console.WriteLine("Выполнение команды отменено.");
            return;
          }
        }
      }
    } while (true);
  }
}

Результат выполнения примера:

Чтобы отменить выполнение команды нажмите Esc.
Ожидание события E...
Выполнение команды отменено.
Исключение ядра СУБД ЛИНТЕР
Текст сообщения: [Linter error] query has been cancelled
Код СУБД ЛИНТЕР: 1097
Код операционной системы: 0
Освобождение ресурсов.
Выполнение команды завершено.
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter