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)

適用於