OracleLob Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет двоичный тип данных больших объектов (LOB
), хранящихся на сервере Oracle. Этот класс не наследуется.
public ref class OracleLob sealed : System::IO::Stream, ICloneable, System::Data::SqlTypes::INullable
public sealed class OracleLob : System.IO.Stream, ICloneable, System.Data.SqlTypes.INullable
type OracleLob = class
inherit Stream
interface ICloneable
interface IDisposable
interface INullable
Public NotInheritable Class OracleLob
Inherits Stream
Implements ICloneable, INullable
- Наследование
- Реализации
Комментарии
Отличается OracleLob от OracleBFile тем, что данные хранятся на сервере, а не в физическом файле в операционной системе. Это также может быть объект чтения и записи, в OracleBFileотличие от , который всегда доступен только для чтения.
Может OracleLob быть одним из этих OracleType типов данных.
Тип данных OracleType | Описание |
---|---|
Blob |
Тип данных Oracle BLOB , содержащий двоичные данные с максимальным размером 4 гигабайт (ГБ). Соответствует Array типа Byte. |
Clob |
Тип данных Oracle CLOB , содержащий символьные данные на основе символьного набора по умолчанию на сервере, с максимальным размером 4 ГБ. Соответствует String. |
NClob |
Тип данных Oracle NCLOB , содержащий символьные данные на основе национального набора символов на сервере с максимальным размером 4 ГБ. Соответствует String. |
Разработчик приложения .NET может извлекать значения Oracle LOB
в базовые типы данных .NET, такие как Array тип Byte и String, или специализированный OracleLob тип данных. Класс OracleLob поддерживает чтение данных из Oracle LOB
в базе данных Oracle и запись в нее.
Ниже приведены main характеристики OracleLob типа данных, которые отличают его от базовых типов данных .NET.
После получения значения Oracle
LOB
из базы данных Oracle в OracleLob класс можно изменитьLOB
данные в открытой транзакции, и изменения будут напрямую отражены в базе данных. Если вы извлекаете значение OracleLOB
в Array тип Byte или String обновляете эти массивы, изменения не отражаются в базе данных.При использовании OracleLob класса для доступа к блоку
LOB
значения только этот блок передается из базы данных Oracle клиенту. При использовании GetChars метода для доступа к блокуLOB
значения все содержимое значения передается из базы данных Oracle клиенту.
Чтобы получить OracleLob объект , вызовите GetOracleLob метод .
Вы можете создать объект, OracleLob имеющий значение NULL, в следующем формате:
OracleLob myLob = OracleLob.Null;
Dim myLob As OracleLob = OracleLob.Null
Этот метод используется в основном для проверки того, имеет ли LOB
возвращаемый с сервера объект NULL, как показано в этом примере:
if (myLob == OracleLob.Null)
If (myLob = OracleLob.Null) Then
Значение NULL LOB
ведет себя аналогично нулевому байту LOB
в , который Read выполняется успешно и всегда возвращает ноль байтов.
При выборе столбца LOB
, содержащего значение NULL, возвращается Null.
Необходимо начать транзакцию перед получением временного LOB
. В противном OracleDataReader случае может не получить данные позже.
Вы также можете открыть временную LOB
в Oracle, вызвав DBMS_LOB. Системная хранимая процедура CREATETEMPORARY и привязка выходного LOB
параметра. На стороне клиента временный LOB
объект ведет себя как табличный LOB
. Например, чтобы обновить временный LOB
, он должен быть заключен в транзакцию.
В следующем примере показано, как открыть временный LOB
:
var connection = new OracleConnection("server=MyServer; integrated security=yes;");
connection.Open();
OracleTransaction transaction = connection.BeginTransaction();
OracleCommand command = connection.CreateCommand();
command.Transaction = transaction;
command.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
command.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
var tempLob = (OracleLob)command.Parameters[0].Value;
var tempbuff = new byte[10000];
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(tempbuff,0,tempbuff.Length);
tempLob.EndBatch();
command.Parameters.Clear();
command.CommandText = "MyTable.MyProc";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new OracleParameter("ImportDoc", OracleType.Blob)).Value = tempLob;
command.ExecuteNonQuery();
transaction.Commit();
connection.Close();
Примечание
При использовании с символьными данными наследуемый WriteByte метод завершается ошибкой InvalidOperationException , и создается исключение . Вместо этого рекомендуется использовать метод Write.
Временные LOB
закрываются только при закрытии подключения, но при пуле и под нагрузкой временные LOB
не закрываются. Это можно устранить, устранив временный LOB
, вызвав tempLob.Dispose()
.
Поля
Null |
Представляет пустой объект OracleLob. |
Свойства
CanRead |
Получает значение, определяющее возможность чтения потока |
CanSeek |
Получает значение, показывающее, могут ли быть выполнены операции прямого и обратного поиска. |
CanTimeout |
Возвращает значение, которое показывает, может ли для данного потока истечь время ожидания. (Унаследовано от Stream) |
CanWrite |
Всегда возвращает логическое значение ИСТИНА, независимо от того, поддерживает ли |
ChunkSize |
Получает значение, определяющее минимальное количество байтов, которое необходимо извлечь с сервера или отправить на сервер при выполнении операции чтения или записи. |
Connection |
Получает OracleConnection, используемый данным экземпляром OracleLob. |
IsBatched |
Получает значение, определяющее, вызвало ли приложение метод BeginBatch(). |
IsNull |
Получает значение, определяющее, является ли OracleLob потоком Null. |
IsTemporary |
Получает значение, определяющее, является ли OracleLob временным |
Length |
Получает значение, возвращающее размер OracleLob. |
LobType |
Получает значение, возвращающее тип данных |
Position |
Получает текущую позицию чтения в потоке OracleLob. |
ReadTimeout |
Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции чтения. (Унаследовано от Stream) |
Value |
Получает эквивалент общеязыковой среды выполнения потока для базового значения. |
WriteTimeout |
Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции записи. (Унаследовано от Stream) |
Методы
Append(OracleLob) |
Добавляет данные из указанного |
BeginBatch() |
Предотвращает срабатывание серверных триггеров при выполнении нескольких операций чтения. |
BeginBatch(OracleLobOpenMode) |
Предотвращает срабатывание серверных триггеров при выполнении нескольких операций чтения и записи в указанном режиме доступа. |
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Начинает операцию асинхронного чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).) (Унаследовано от Stream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Начинает операцию асинхронной записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32).) (Унаследовано от Stream) |
Clone() |
Создает новый объект OracleLob, который ссылается на тот же |
Close() |
Закрывает текущий поток и освобождает все ресурсы, связанные с данным потоком. |
Close() |
Закрывает текущий поток и отключает все ресурсы (например, сокеты и файловые дескрипторы), связанные с текущим потоком. Вместо вызова данного метода, убедитесь в том, что поток надлежащим образом ликвидирован. (Унаследовано от Stream) |
CopyTo(Int64, OracleLob, Int64, Int64) |
Копирует из данного объекта OracleLob в OracleLob, являющийся объектом назначения, с указанным объемом данных и смещением источника. |
CopyTo(OracleLob) |
Копирует из данного объекта OracleLob в объект назначения — OracleLob. |
CopyTo(OracleLob, Int64) |
Копирование из данного объекта OracleLob в объект назначения — OracleLob с указанным объемом данных. |
CopyTo(Stream) |
Считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyTo(Stream, Int32) |
Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream, CancellationToken) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный токен отмены. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream, Int32) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и токен отмены. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CreateObjRef(Type) |
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
CreateWaitHandle() |
Устаревшие..
Устаревшие..
Устаревшие..
Выделяет объект WaitHandle. (Унаследовано от Stream) |
Dispose() |
Освобождает ресурсы, используемые данным объектом. |
Dispose() |
Освобождает все ресурсы, занятые модулем Stream. (Унаследовано от Stream) |
Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые объектом Stream, а при необходимости освобождает также управляемые ресурсы. (Унаследовано от Stream) |
DisposeAsync() |
Асинхронно освобождает неуправляемые ресурсы, используемые классом Stream. (Унаследовано от Stream) |
EndBatch() |
Позволяет серверным триггерам возобновить работу после выполнения нескольких операций записи. |
EndRead(IAsyncResult) |
Ожидает завершения отложенного асинхронного чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).) (Унаследовано от Stream) |
EndWrite(IAsyncResult) |
Заканчивает операцию асинхронной записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32).) (Унаследовано от Stream) |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
Erase() |
Удаляет все данные из этого OracleLob. |
Erase(Int64, Int64) |
Удаляет заданный объем данных из этого OracleLob. |
Flush() |
Не поддерживается в текущей версии. |
FlushAsync() |
Асинхронно очищает все буферы для этого потока и вызывает запись всех буферизованных данных в базовое устройство. (Унаследовано от Stream) |
FlushAsync(CancellationToken) |
Асинхронно очищает все буферы данного потока, вызывает запись буферизованных данных в базовое устройство и отслеживает запросы отмены. (Унаследовано от Stream) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetLifetimeService() |
Устаревшие..
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
InitializeLifetimeService() |
Устаревшие..
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
MemberwiseClone(Boolean) |
Создает неполную копию текущего объекта MarshalByRefObject. (Унаследовано от MarshalByRefObject) |
ObjectInvariant() |
Устаревшие..
Обеспечивает поддержку для Contract. (Унаследовано от Stream) |
Read(Byte[], Int32, Int32) |
Считывает последовательность байтов из текущего потока OracleLob и перемещает позицию внутри потока на число считанных байтов. |
Read(Span<Byte>) |
При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов. (Унаследовано от Stream) |
ReadAsync(Byte[], Int32, Int32) |
Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию внутри потока на число считанных байтов. (Унаследовано от Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно считывает последовательность байтов из текущего потока, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены. (Унаследовано от Stream) |
ReadAsync(Memory<Byte>, CancellationToken) |
Асинхронно считывает последовательность байтов из текущего потока, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены. (Унаследовано от Stream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
Считывает по крайней мере минимальное количество байтов из текущего потока и перемещает позицию в потоке на число прочитанных байтов. (Унаследовано от Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Асинхронно считывает по крайней мере минимальное количество байтов из текущего потока, перемещает позицию в потоке на число прочитанных байтов и отслеживает запросы отмены. (Унаследовано от Stream) |
ReadByte() |
Считывает байт из потока и перемещает позицию в потоке на один байт или возвращает -1, если достигнут конец потока. (Унаследовано от Stream) |
ReadExactly(Byte[], Int32, Int32) |
Считывает |
ReadExactly(Span<Byte>) |
Считывает байты из текущего потока и перемещает позицию в потоке |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно считывает |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Асинхронно считывает байты из текущего потока, перемещает позицию в потоке |
Seek(Int64, SeekOrigin) |
Задает позицию в текущем потоке OracleLob. |
SetLength(Int64) |
Задает длину потока OracleLob меньше текущей длины. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Write(Byte[], Int32, Int32) |
Записывает последовательность байтов в текущий поток OracleLob и перемещает текущую позицию внутри потока на число записанных байтов. |
Write(ReadOnlySpan<Byte>) |
При переопределении в производном классе записывает последовательность байтов в текущий поток и перемещает текущую позицию в нем вперед на число записанных байтов. (Унаследовано от Stream) |
WriteAsync(Byte[], Int32, Int32) |
Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию внутри потока на число записанных байтов. (Унаследовано от Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены. (Унаследовано от Stream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены. (Унаследовано от Stream) |
WriteByte(Byte) |
Записывает байт в текущее положение в потоке OracleLob, при этом позиция в потоке перемещается вперед на один байт. |
WriteByte(Byte) |
Записывает байт в текущее положение в потоке и перемещает позицию в потоке вперед на один байт. (Унаследовано от Stream) |
Явные реализации интерфейса
IDisposable.Dispose() |
Освобождает все ресурсы, занятые модулем Stream. (Унаследовано от Stream) |
Методы расширения
CopyToAsync(Stream, PipeWriter, CancellationToken) |
Асинхронно считывает байты из Stream и записывает их в указанный PipeWriter, используя токен отмены. |