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