Freigeben über


OracleBFile-Klasse

Stellt ein verwaltetes OracleBFile-Objekt dar, das für den Oracle-Datentyp BFILE entwickelt wurde. Die Klasse kann nicht vererbt werden.

Namespace: System.Data.OracleClient
Assembly: System.Data.OracleClient (in system.data.oracleclient.dll)

Syntax

'Declaration
Public NotInheritable Class OracleBFile
    Inherits Stream
    Implements ICloneable, INullable, IDisposable
'Usage
Dim instance As OracleBFile
public sealed class OracleBFile : Stream, ICloneable, INullable, IDisposable
public ref class OracleBFile sealed : public Stream, ICloneable, INullable, IDisposable
public final class OracleBFile extends Stream implements ICloneable, INullable, 
    IDisposable
public final class OracleBFile extends Stream implements ICloneable, INullable, 
    IDisposable

Hinweise

Der Oracle-BFILE-Datentyp ist ein Oracle-LOB-Datentyp, der einen Verweis auf Binärdaten mit einer Größe von maximal 4 Gigabyte enthält. Der Oracle-BFILE-Datentyp unterscheidet sich von anderen Oracle-LOB-Datentypen dadurch, dass dessen Daten in einer physikalischen Datei im Betriebssystem und nicht auf dem Server gespeichert werden. Beachten Sie, dass der BFILE-Datentyp einen schreibgeschützten Zugriff auf Daten ermöglicht. Daher werden schreibende Methoden, die von der Stream-Klasse vererbt wurden, nicht unterstützt.

Weitere Merkmale des BFILE-Datentyps, die ihn vom LOB-Datentyp unterscheiden:

  • Er enthält unstrukturierte Daten.

  • Er unterstützt serverseitige Segmentierung (Chunking).

  • Er verwendet eine Verweiskopiersemantik. Wenn Sie z. B. einen Kopiervorgang für eine BFILE ausführen, wird nur der BFILE-Lokator (ein Verweis auf die Datei) kopiert. Die Daten in der Datei werden nicht kopiert.

Der BFILE-Datentyp sollte für Verweise auf LOBs verwendet werden, die aufgrund ihrer Größe am besten nicht in der Datenbank gespeichert werden. Auf dem Client und auf dem Server sowie bei der Kommunikation fällt für einen BFILE-Datentyp ein größerer Aufwand an als für einen LOB-Datentyp. Aus Effizienzgründen sollten Sie nur zum Abrufen kleiner Datenmengen auf eine BFILE zugreifen. Wenn Sie das vollständige Objekt abrufen möchten, ist der Zugriff auf datenbankresidente LOBs effizienter.

Jedes OracleBFile-Objekt, das nicht NULL ist, ist zwei Entitäten zugeordnet, die den Speicherort der zugrunde liegenden physikalischen Datei definieren:

  • Einem Oracle-DIRECTORY-Objekt, das einen Datenbankalias für ein Verzeichnis im Dateisystem darstellt, und

  • Dem Dateinamen der zugrunde liegenden Datei in dem Verzeichnis, das dem DIRECTORY-Objekt zugeordnet ist.

Nach dem Erstellen einer BFILE können Sie deren Lokator in Form eines OracleBFile-Objekts abrufen, indem Sie die ExecuteReader-Methode oder die ExecuteScalar-Methode verwenden.

Rufen Sie zum Abrufen eines OracleBFile-Objekts die GetOracleBFile-Methode auf.

Die physikalische Datei, die einem OracleBFile-Objekt zugeordnet ist, muss erst vorhanden sein, wenn Sie darauf zugreifen. Eine Anwendung kann eine OracleBFile an eine nicht vorhandene Datei binden, die physikalische Datei am erwarteten Speicherort erstellen, und dann Read aufrufen.

Beim Versuch, auf eine geschlossene OracleBFile mithilfe der Read-Methode oder der Seek-Methode zuzugreifen, wird automatisch ein OracleBFile-Stream erneut geöffnet.

Das folgende C#-Beispiel veranschaulicht, wie Sie eine BFILE in einer Oracle-Tabelle erstellen und sie anschließend als ein OracleBFile-Objekt abrufen. Das Beispiel demonstriert die Verwendung des OracleDataReader-Objekts und der OracleBFile sowie der Seek-Methode und der Read-Methode.

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;
}

Weitere Informationen zum Erstellen und Verwenden einer Oracle-BFILE finden Sie im entsprechenden Thema in der Oracle-Dokumentation.

Hinweis

Die BeginWrite-Methode, die EndWrite-Methode und die WriteByte-Methode, die von der System.IO.Stream-Klasse vererbt werden, werden nicht unterstützt, weil der BFILE-Datentyp schreibgeschützt ist.

Vererbungshierarchie

System.Object
   System.MarshalByRefObject
     System.IO.Stream
      System.Data.OracleClient.OracleBFile

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1

Siehe auch

Referenz

OracleBFile-Member
System.Data.OracleClient-Namespace