OracleLob 類別

定義

表示儲存在 Oracle 伺服器的大型二進位物件 (LOB) 資料型別。 此類別無法獲得繼承。

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 GB 的二進位數據, (GB) 。 這會對應至型別 ArrayByte
Clob Oracle CLOB 資料類型,此資料類型會根據伺服器上的預設字元集來包含字元數據,大小上限為 4 GB。 這對應至 String
NClob Oracle NCLOB 資料類型,其包含字元數據,根據伺服器上的國家字元集,大小上限為 4 GB。 這對應至 String

.NET 應用程式開發人員可以將 Oracle LOB 值擷取到基本的 .NET 數據類型,例如 ArrayByte 別和 String或特製化 OracleLob 數據類型。 類別 OracleLob 支援從 Oracle 資料庫中讀取和寫入 Oracle LOB 的數據。

以下是與基本 .NET 數據類型區別的數據類型主要特性 OracleLob

  • 從 Oracle 資料庫擷取 Oracle LOB 值到 OracleLob 類別之後,您就可以在開啟的交易中變更 LOB 數據,而您的變更會直接反映到資料庫。 如果您將 Oracle LOB 值擷取到 Array 類型的 ByteString 並更新這些陣列,則您的變更不會反映至資料庫。

  • 當您使用 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 的行為類似於 中Read成功且一律傳回零位元組的零位元組LOB

LOB選取包含 Null 值的資料列會傳Null回 。

您必須先開始交易,才能取得暫時的 LOB。 否則, OracleDataReader 稍後可能無法取得數據。

您也可以呼叫 DBMS_LOB,在 Oracle 中開啟暫時性 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不會關閉。 藉由叫用 來處置暫時的 LOBtempLob.Dispose()即可解決此問題。

欄位

Null

表示 Null OracleLob 物件。

屬性

CanRead

取得值,表示 LOB 資料流是否可讀取。

CanSeek

取得值,表示是否可以執行向前及向後搜尋的作業。

CanTimeout

取得值,該值判斷目前的資料流是否可以逾時。

(繼承來源 Stream)
CanWrite

不論 LOB 是否支援寫入,永遠傳回 true。

ChunkSize

取得值,指出讀取/寫入作業期間從伺服器擷取或傳送到伺服器的最小位元組數。

Connection

取得 OracleConnection 的這個執行個體所使用的 OracleLob

IsBatched

取得值,指出應用程式是否已呼叫 BeginBatch() 方法。

IsNull

取得值,指出 OracleLob 是否為 Null 資料流。

IsTemporary

取得值,指出 OracleLob 是否為暫時 LOB

Length

取得傳回 OracleLob 大小的值。

LobType

取得傳回 LOB 資料型別的值。

Position

取得 OracleLob 資料流中目前的讀取位置。

ReadTimeout

取得或設定值 (以毫秒為單位),該值決定資料流在逾時前將嘗試讀取多長時間。

(繼承來源 Stream)
Value

取得與基礎值對等的 Common Language Runtime 資料流值。

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 物件,將相同的 Oracle LOB 參考為原始 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)

建立包含所有相關資訊的物件,這些資訊是產生用來與遠端物件通訊的所需 Proxy。

(繼承來源 MarshalByRefObject)
CreateWaitHandle()
已淘汰.
已淘汰.
已淘汰.

配置 WaitHandle 物件。

(繼承來源 Stream)
Dispose()

釋放此物件所使用的資源。

Dispose()

釋放 Stream 所使用的所有資源。

(繼承來源 Stream)
Dispose(Boolean)

釋放 Stream 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。

(繼承來源 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()
已淘汰.

擷取控制這個執行個體存留期 (Lifetime) 原則的目前存留期服務物件。

(繼承來源 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)

適用於