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