GetLinterBlobForUpdate

Метод возвращает экземпляр класса LinterBlob, который позволяет добавлять данные в BLOB-значение небольшими порциями, при этом не нужно хранить в оперативной памяти BLOB-значение целиком. Он эффективен в тех случаях, когда нужно добавить к BLOB-значению порцию данных большого размера.

Алгоритм работы следующий:

  • выполнить запрос на выборку данных методом command.ExecuteReader();

  • перейти к требуемой записи выборки методом reader.Read();

  • получить объект LinterBlob методом reader.GetLinterBlobForUpdate();

  • в цикле добавлять порции данных к BLOB-значению методом linterBlob.Append().

Синтаксис
LinterBlob GetLinterBlobForUpdate(int i);

i – порядковый номер BLOB-поля в текущей строке (отсчет начинается с 0).

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

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

Исключения
IndexOutOfRangeException Задан порядковый номер несуществующего столбца.
InvalidOperationException Не установлена текущая строка выборки данных (необходимо выполнить метод Read()).
Пример
// C#
using System;
using System.Data.LinterClient;

class GetLinterBlobForUpdateSample
{
  static void Main()
  {
    LinterDbConnection conn = null;
    try
    {
      // Соединение с БД
      conn = new LinterDbConnection("UserID=SYSTEM;Password=MANAGER8");
      conn.Open();
      // Создание таблицы
      LinterDbCommand cmd = conn.CreateCommand();
      cmd.CommandText =
        "create or replace table TEST_BLOB (ID int, BLOB_COLUMN blob)";
      cmd.ExecuteNonQuery();
      // Добавление записи в таблицу
      cmd.CommandText =
        "insert into TEST_BLOB (ID, BLOB_COLUMN) values (1, hex('0102030405'))";
      cmd.ExecuteNonQuery();
      // Получение первой записи
      cmd.CommandText = "select BLOB_COLUMN, ID from TEST_BLOB where ID = 1";
      LinterDbDataReader reader = cmd.ExecuteReader();
      reader.Read();
      // Получение объекта LinterBlob для работы с BLOB
      LinterBlob blob = reader.GetLinterBlobForUpdate(0);
      // Очистка BLOB
      blob.Clear();
      // Добавление данных в BLOB
      byte[] bytes = new byte[] { 6, 7, 8, 9 };
      for (int i = 1; i <  100; i++)
      {
        blob.Append(bytes, 0, bytes.Length);
      }
      // Освобождение DataReader
      reader.Dispose();
      Console.WriteLine("Поле BLOB успешно обновлено.");
    }
    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("Выполнение команды завершено.");
    }
  }
}