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("Выполнение команды завершено.");
}
}
}