DeriveParameters

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

DeriveParameters перезаписывает любые имеющиеся сведения о параметрах для объекта LinterDbCommand.

Для получения этих сведений DeriveParameters требуется дополнительное обращение к СУБД. Если сведения о параметрах известны заранее, рекомендуется явно заполнить ими коллекцию параметров.

DeriveParameters можно использовать только с хранимыми процедурами.

Синтаксис
public static void DeriveParameters(LinterDbCommand cmd);

cmd – объект LinterDbCommand, определяющий хранимую процедуру, из которой необходимо извлечь сведения о параметрах. Извлеченные параметры добавляются в коллекцию параметров Parameters данного объекта LinterDbCommand.

Возвращаемое значение

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

Исключения
ArgumentNullException Параметр cmd равен null.
InvalidOperationException

Возможные причины:

  • тип команды не CommandType.StoredProcedure;

  • свойство Connection не инициализировано;

  • свойство CommandText не инициализировано;

  • хранимая процедура не найдена.

LinterSqlException Код завершения СУБД ЛИНТЕР не равен 0.
Пример
// C#
using System;
using System.Data;
using System.Data.LinterClient;

class DeriveParametersSample
{
  static void Main()
  {
    LinterDbConnection conn = null;
    try
    {
      // Соединение с БД
      conn = new LinterDbConnection(
        "DataSource=LOCAL;UserID=SYSTEM;Password=MANAGER8");
      conn.Open();

      // Создание процедуры
      LinterDbCommand cmd = conn.CreateCommand();
      cmd.CommandText = @"
        create or replace procedure SUMMA (in A int; in B int)
          result int for debug
        code
          return A + B;
        end;";
      cmd.ExecuteNonQuery();

      // Выполнение процедуры
      cmd.CommandText = "SUMMA";
      cmd.CommandType = CommandType.StoredProcedure;
      LinterDbCommandBuilder.DeriveParameters(cmd);
      cmd.Parameters["A"].Value = 2;
      cmd.Parameters["B"].Value = 3;
      int result = (int)cmd.ExecuteScalar();
      Console.WriteLine("Результат: " + result);
    }
    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 (conn != null)
      {
        conn.Close();
      }
      Console.WriteLine("Выполнение команды завершено.");
    }
  }
}