Prepare

Метод используется для подготовки параметризованных SQL-запросов или хранимых процедур с параметрами для последующего (возможно, многократного) выполнения. При первом вызове метод выполняет претрансляцию SQL-запроса (хранимой процедуры) и выполняет привязку параметров. При последующих вызовах метода с тем же SQL-запросом выполняется только привязка параметров. Вызов метода можно прописать в исходном коде приложения, и тогда на этапе выполнения (ExecuteReader, ExecuteScalar, ExecuteNonQuery) буферы параметров будут привязаны к буферу запроса. Но если метод prepare() явно не вызывается в приложении, то он будет выполнен автоматически самим ядром СУБД ЛИНТЕР или ADO.NET-провайдером СУБД ЛИНТЕР.

Примечание

Если в свойстве CommandType указан тип команды TableDirect, метод Prepare не выполняется.

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

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

Исключения
InvalidOperationException Текст команды не установлен или команда не связана с соединением или соединение не открыто.
LinterSqlException Код завершения СУБД ЛИНТЕР не равен 0.
Пример
// C#
using System;
using System.Data;
using System.Data.Common;

class PrepareSample
{
  static void Main()
  {
    // Создание фабрики классов провайдера
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.LinterClient");
    // Соединение с БД
    DbConnection con = factory.CreateConnection();
    con.ConnectionString = "User ID=SYSTEM;Password=MANAGER8;Data Source=LOCAL";
    con.Open();
    // Создание объекта DbCommand
    DbCommand cmd = factory.CreateCommand();
    cmd.Connection = con;
    cmd.CommandText = "p_inout_param";
    cmd.CommandType = CommandType.StoredProcedure;
    // Coздание входного параметра
    DbParameter inParam = factory.CreateParameter();
    inParam.DbType = DbType.String;
    inParam.Direction = ParameterDirection.Input;
    inParam.Size = 255;
    inParam.ParameterName = ":ch_a";
    // Coздание входного-выходного параметра
    DbParameter inOutParam = factory.CreateParameter();
    inOutParam.DbType = DbType.Int32;
    inOutParam.Direction = ParameterDirection.InputOutput;
    inOutParam.ParameterName = ":i_b";
    // Добавление параметров в коллекцию
    cmd.Parameters.Add(inParam);
    cmd.Parameters.Add(inOutParam);
    // Подготовка команды
    cmd.Prepare();
    // Выполнение команды при разных значениях параметров
    foreach (int i in new int[] { 1, 2, 3 })
    {
      inParam.Value = "Значение " + i;
      inOutParam.Value = i;
      cmd.ExecuteNonQuery();
      Console.WriteLine("Входное значение = {0} выходное = {1}",
        i, inOutParam.Value);
    }
    // Освобождение ресурсов
    cmd.Dispose();
    con.Dispose();
  }
}

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

Входное значение = 1 выходное = 11
Входное значение = 2 выходное = 12
Входное значение = 3 выходное = 13