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 данные в открытой транзакции, и изменения будут напрямую отражены в базе данных. Если вы извлекаете значение Oracle LOB в 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

Получает значение, определяющее возможность чтения потока LOB.

CanSeek

Получает значение, показывающее, могут ли быть выполнены операции прямого и обратного поиска.

CanTimeout

Возвращает значение, которое показывает, может ли для данного потока истечь время ожидания.

(Унаследовано от Stream)
CanWrite

Всегда возвращает логическое значение ИСТИНА, независимо от того, поддерживает ли LOB запись или нет.

ChunkSize

Получает значение, определяющее минимальное количество байтов, которое необходимо извлечь с сервера или отправить на сервер при выполнении операции чтения или записи.

Connection

Получает OracleConnection, используемый данным экземпляром OracleLob.

IsBatched

Получает значение, определяющее, вызвало ли приложение метод BeginBatch().

IsNull

Получает значение, определяющее, является ли OracleLob потоком Null.

IsTemporary

Получает значение, определяющее, является ли OracleLob временным LOB.

Length

Получает значение, возвращающее размер OracleLob.

LobType

Получает значение, возвращающее тип данных LOB.

Position

Получает текущую позицию чтения в потоке OracleLob.

ReadTimeout

Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции чтения.

(Унаследовано от Stream)
Value

Получает эквивалент общеязыковой среды выполнения потока для базового значения.

WriteTimeout

Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции записи.

(Унаследовано от Stream)

Методы

Append(OracleLob)

Добавляет данные из указанного LOB в текущий LOB.

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, который ссылается на тот же LOB Oracle, что и исходный объект 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)

Считывает count количество байтов из текущего потока и перемещает позицию в потоке.

(Унаследовано от Stream)
ReadExactly(Span<Byte>)

Считывает байты из текущего потока и перемещает позицию в потоке buffer до заполнения.

(Унаследовано от Stream)
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно считывает count количество байтов из текущего потока, перемещает позицию в потоке и отслеживает запросы отмены.

(Унаследовано от Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает байты из текущего потока, перемещает позицию в потоке buffer до заполнения и отслеживает запросы отмены.

(Унаследовано от Stream)
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, используя токен отмены.

Применяется к