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