OracleBFile 類別

定義

表示 Managed OracleBFile 物件,該物件是專為使用 Oracle BFILE 資料型別而設計的物件。 此類別無法獲得繼承。

public ref class OracleBFile sealed : System::IO::Stream, ICloneable, System::Data::SqlTypes::INullable
public sealed class OracleBFile : System.IO.Stream, ICloneable, System.Data.SqlTypes.INullable
type OracleBFile = class
    inherit Stream
    interface ICloneable
    interface IDisposable
    interface INullable
type OracleBFile = class
    inherit Stream
    interface ICloneable
    interface INullable
    interface IDisposable
Public NotInheritable Class OracleBFile
Inherits Stream
Implements ICloneable, INullable
繼承
實作

備註

Oracle BFILE 資料類型是 Oracle LOB 資料類型,其中包含二進位資料的參考,大小上限為 4 GB。 Oracle 與其他 Oracle BFILELOB 資料類型不同,因為其資料會儲存在作業系統的實體檔案中,而不是儲存在伺服器上。 請注意, BFILE 資料類型會提供資料的唯讀存取權。 因此,不支援繼承自 類別的 Stream 寫入導向方法。

與資料類型區別 LOBBFILE 資料類型的其他特性是:

  • 包含非結構化資料。

  • 支援伺服器端區塊。

  • 使用參考複製語意。 例如,如果您在 上 BFILE 執行複製作業,則只會 BFILE 複製定位器 (這是檔案參考) 。 而不會複製檔案中的資料。

資料類型 BFILE 應該用於參考 LOB 大小較大的 ,因此,不適合儲存在資料庫中。 相較于資料類型,使用 BFILE 資料類型 LOB 的用戶端、伺服器和通訊額外負荷。 如果您只需要取得少量資料,則存取 會更有效率 BFILE 。 如果您需要取得整個物件,請更有效率地存取資料庫駐留 LOB 的 。

每個非 Null OracleBFile 物件都會與定義基礎實體檔案位置的兩個實體相關聯:

  • Oracle DIRECTORY 物件 (檔案系統中目錄的資料庫別名) 及

  • 基礎實體檔案的檔名 (位於與 DIRECTORY 物件相關聯的目錄中)。

BFILE建立 之後,您可以使用 或 ExecuteScalar 方法,以 物件 ExecuteReader 的形式擷 OracleBFile 取其定位器。

若要取得 OracleBFile 物件,請呼叫 GetOracleBFile 方法。

在您嘗試存取物件之前,與 物件相關聯的實體檔案 OracleBFile 不需要存在。 應用程式可以將 系結 OracleBFile 至不存在的檔案、在預期的位置建立實體檔案,然後呼叫 Read

任何使用 ReadSeek 方法存取已關閉 OracleBFile 的嘗試都會自動重新開啟 OracleBFile 資料流程。

下列 C# 範例示範如何在 Oracle 資料表中建立 BFILE ,然後以 物件的形式擷 OracleBFile 取它。 此範例示範如何使用 OracleDataReader 物件和 OracleBFileSeekRead 方法。

private void GetOracleBFile(string connectionString)
{
    //Create and open the connection.
    using (OracleConnection connection = new OracleConnection(connectionString))
    {
        connection.Open();

        //Create and execute the commands.
        OracleCommand command = connection.CreateCommand();
        command.CommandText = "CREATE OR REPLACE DIRECTORY TestDir AS 'c:\\bfiles'";
        command.ExecuteNonQuery();
        command.CommandText = "CREATE TABLE TestTable(col1 number, col2 BFILE)";
        command.ExecuteNonQuery();
        command.CommandText = "INSERT INTO TestTable VALUES ('2', BFILENAME('TESTDIR', 'File.jpg'))";
        command.ExecuteNonQuery();
        command.CommandText = "SELECT * FROM TestTable";

        //Read the BFile data.
        byte[] buffer = new byte[100];
        OracleDataReader dataReader = command.ExecuteReader();
        using (dataReader)
        {
            if (dataReader.Read())
            {
                OracleBFile BFile = dataReader.GetOracleBFile(1);
                using (BFile)
                {
                    BFile.Seek(0, SeekOrigin.Begin);
                    BFile.Read(buffer, 0, 100);
                }
            }
        }
    }
    return;
}

如需有關建立和使用 Oracle BFILE 的詳細資訊,請參閱 Oracle 檔中的適當主題。

注意

BeginWrite不支援繼承自 類別的 System.IO.StreamEndWriteWriteByte 方法,因為 BFILE 資料類型是唯讀的。

欄位

Null

表示沒有繫結到實體檔案的 null OracleBFile 物件。

屬性

CanRead

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

CanSeek

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

CanTimeout

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

(繼承來源 Stream)
CanWrite

取得值,表示物件是否支援寫入。

Connection

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

DirectoryName

取得 DIRECTORY 物件的名稱,該物件與 OracleBFile 物件關聯。

FileExists

取得值,表示作業系統中是否有包含 BFILE 資料的實體檔案存在。

FileName

取得不含路徑的 BFILE 名稱。

IsNull

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

Length

取得值,傳回 OracleBFile 物件相關聯之實體檔案的長度 (以位元組為單位)。

Position

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

ReadTimeout

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

(繼承來源 Stream)
Value

取得 Array 型別的 Byte,其中含有 OracleBFile 資料。

WriteTimeout

取得或設定毫秒值,該值決定在逾時前資料流將嘗試寫入多長時間。

(繼承來源 Stream)

方法

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

開始非同步的讀取作業。 (請考慮用 ReadAsync(Byte[], Int32, Int32) 替代。)

(繼承來源 Stream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

開始非同步的寫入作業。 (請考慮用 WriteAsync(Byte[], Int32, Int32) 替代。)

(繼承來源 Stream)
Clone()

會建立這個 OracleBFile 物件的複本,這個複本與原始物件一樣都會關聯到相同的實體檔案。

Close()

關閉目前資料流和釋放與目前資料流相關聯的任何資源 (例如通訊端和檔案控制代碼)。 請確定正確地處置資料流,而非呼叫這個方法。

(繼承來源 Stream)
CopyTo(Int64, OracleLob, Int64, Int64)

以指定的資料量、來源位移和目的位移,從這個 OracleBFile 複製到目的 OracleLob

CopyTo(OracleLob)

將這個 OracleBFile 的完整內容複製到目的 OracleLob 的開頭。

CopyTo(OracleLob, Int64)

將這個 OracleBFile 的完整內容複製到指定位移 (Offset) 的目的 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)
EndRead(IAsyncResult)

等候暫止的非同步讀取完成。 (請考慮用 ReadAsync(Byte[], Int32, Int32) 替代。)

(繼承來源 Stream)
EndWrite(IAsyncResult)

結束非同步的寫入作業。 (請考慮用 WriteAsync(Byte[], Int32, Int32) 替代。)

(繼承來源 Stream)
Equals(Object)

判斷指定的物件是否等於目前的物件。

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

自目前 OracleBFile 讀取一位元組序列,並依所讀取的位元組數目進階資料流裡的位置。

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)

設定目前 OracleBFile 資料流上的位置。

SetFileName(String, String)

OracleBFile 物件繫結到作業系統中不同的檔案。

SetLength(Int64)

目前不支援。

ToString()

傳回代表目前物件的字串。

(繼承來源 Object)
Write(Byte[], Int32, Int32)

目前不支援。

Write(ReadOnlySpan<Byte>)

在衍生類別中覆寫時,將一連串的位元組寫入目前的資料流,並且由這個資料流中目前的位置前移寫入的位元組數目。

(繼承來源 Stream)
WriteAsync(Byte[], Int32, Int32)

以非同步的方式將位元組序列寫入至目前的資料流,並依寫入的位元組數將資料流中目前的位置往前移。

(繼承來源 Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

以非同步的方式將一連串的位元組寫入目前的資料流,由這個資料流中目前的位置前移寫入的位元組數目,並且監視取消要求。

(繼承來源 Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

以非同步的方式將一連串的位元組寫入目前的資料流,由這個資料流中目前的位置前移寫入的位元組數目,並且監視取消要求。

(繼承來源 Stream)
WriteByte(Byte)

寫入一個位元組至資料流的目前位置,並將資料流位置推進一個位元組。

(繼承來源 Stream)

明確介面實作

IDisposable.Dispose()

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

(繼承來源 Stream)

適用於