OracleBFile 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示 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 BFILE
與其他 Oracle LOB
數據類型不同,在於其數據會儲存在操作系統中的實體檔案中,而不是儲存在伺服器上。 請注意, BFILE
數據類型提供數據的唯讀存取權。 因此,不支援繼承自 類別的 Stream 寫入導向方法。
與LOB
資料類型區別的數據類型的其他特性BFILE
是:
包含非結構化資料。
支援伺服器端區塊。
使用參考複製語意。 例如,如果您在 上
BFILE
執行複製作業,則只會BFILE
複製定位器 (這是檔案參考) 。 而不會複製檔案中的資料。
數據類型 BFILE
應該用於參考 LOB
大小較大的 ,因此,不適合儲存在資料庫中。 相較於資料類型,使用 BFILE
數據類型 LOB
的用戶端、伺服器和通訊額外負荷。 如果您只需要取得少量數據,則存取 會更有效率 BFILE
。 如果您需要取得整個物件,請更有效率地存取資料庫駐留 LOB
的 。
每個非 NULL OracleBFile 物件都會與定義基礎實體檔案位置的兩個實體相關聯:
Oracle DIRECTORY 物件 (檔案系統中目錄的資料庫別名) 及
基礎實體檔案的檔名 (位於與 DIRECTORY 物件相關聯的目錄中)。
BFILE
建立 之後,您可以使用 或 ExecuteScalar 方法,以 物件ExecuteReader的形式擷OracleBFile取其定位器。
若要取得 OracleBFile 物件,請呼叫 GetOracleBFile 方法。
在您嘗試存取物件之前,與 對象相關聯的實體檔案 OracleBFile 不需要存在。 應用程式可以將 系結 OracleBFile 至不存在的檔案、在預期的位置建立實體檔案,然後呼叫 Read。
任何使用 Read 或 Seek 方法存取已關閉OracleBFile的嘗試都會自動重新開啟OracleBFile數據流。
下列 C# 範例示範如何在 Oracle 資料表中建立 BFILE
,然後以 物件的形式擷 OracleBFile 取它。 此範例示範如何使用 OracleDataReader 物件和 OracleBFileSeek 和 Read 方法。
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.Stream
、 EndWrite
和 WriteByte
方法,因為BFILE
數據類型是唯讀的。
欄位
Null |
表示沒有繫結到實體檔案的 null OracleBFile 物件。 |
屬性
CanRead |
取得值,表示 |
CanSeek |
取得值,表示是否可以執行向前及向後搜尋的作業。 |
CanTimeout |
取得值,該值判斷目前的資料流是否可以逾時。 (繼承來源 Stream) |
CanWrite |
取得值,表示物件是否支援寫入。 |
Connection |
取得 OracleConnection 的這個執行個體所使用的 OracleBFile。 |
DirectoryName |
取得 DIRECTORY 物件的名稱,該物件與 OracleBFile 物件關聯。 |
FileExists |
取得值,表示作業系統中是否有包含 |
FileName |
取得不含路徑的 |
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) |
|
ReadExactly(Span<Byte>) |
從目前的數據流讀取位元組,並將該位置往前移,直到 |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
以異步方式從目前數據流讀取 |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
以異步方式從目前的數據流讀取位元組、將數據流內的位置往前移,直到 |
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) |
擴充方法
CopyToAsync(Stream, PipeWriter, CancellationToken) |
使用取消語彙基元,以非同步的方式從 Stream 讀取位元組,並將其寫入指定的 PipeWriter。 |