OracleLob 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示儲存在 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) 。 這會對應至型別 Array 的 Byte。 |
Clob |
Oracle CLOB 資料類型,包含以伺服器的預設字元集為基礎的字元數據,大小上限為 4 GB。 這對應至 String。 |
NClob |
Oracle NCLOB 資料類型,其包含字元數據,以伺服器上的國家字元集為基礎,大小上限為 4 GB。 這對應至 String。 |
.NET 應用程式開發人員可以將 Oracle LOB
值擷取到基本 .NET 資料類型,例如 Array 型 Byte 別和 String或特製化 OracleLob 數據類型。 類別 OracleLob 支援從 Oracle 資料庫中讀取和寫入 Oracle LOB
的數據。
以下是與基本 .NET 數據類型區別的 OracleLob 資料類型主要特性:
將 Oracle 值從 Oracle
LOB
資料庫擷取到 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
的行為類似於 中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
存不會關閉。 藉由tempLob.Dispose()
叫用 來處置暫存 LOB
,即可解決此問題。
欄位
Null |
表示 Null OracleLob 物件。 |
屬性
CanRead |
取得值,表示 |
CanSeek |
取得值,表示是否可以執行向前及向後搜尋的作業。 |
CanTimeout |
取得值,該值判斷目前的資料流是否可以逾時。 (繼承來源 Stream) |
CanWrite |
不論 |
ChunkSize |
取得值,指出讀取/寫入作業期間從伺服器擷取或傳送到伺服器的最小位元組數。 |
Connection |
取得 OracleConnection 的這個執行個體所使用的 OracleLob。 |
IsBatched |
取得值,指出應用程式是否已呼叫 BeginBatch() 方法。 |
IsNull | |
IsTemporary |
取得值,指出 OracleLob 是否為暫時 |
Length |
取得傳回 OracleLob 大小的值。 |
LobType |
取得傳回 |
Position |
取得 OracleLob 資料流中目前的讀取位置。 |
ReadTimeout |
取得或設定值 (以毫秒為單位),該值決定資料流在逾時前將嘗試讀取多長時間。 (繼承來源 Stream) |
Value |
取得與基礎值對等的 Common Language Runtime 資料流值。 |
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() | |
Close() |
關閉目前的資料流,並釋放與資料流相關聯的資源。 |
Close() |
關閉目前資料流和釋放與目前資料流相關聯的任何資源 (例如通訊端和檔案控制代碼)。 請確定正確地處置資料流,而非呼叫這個方法。 (繼承來源 Stream) |
CopyTo(Int64, OracleLob, Int64, Int64) | |
CopyTo(OracleLob) | |
CopyTo(OracleLob, Int64) | |
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) |
|
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。 |