Delen via


Oracle BFILEs

De .NET Framework-gegevensprovider voor Oracle bevat de OracleBFile klasse die wordt gebruikt om met het Oracle-gegevenstype BFile te werken.

Het Oracle BFILE-gegevenstype is een Oracle LOB-gegevenstype dat een verwijzing naar binaire gegevens bevat met een maximale grootte van 4 gigabyte. Een Oracle BFILE verschilt van andere Oracle LOB-gegevenstypen omdat de gegevens worden opgeslagen in een fysiek bestand in het besturingssysteem in plaats van op de server. Het BFILE-gegevenstype biedt alleen-lezentoegang tot gegevens.

Andere kenmerken van een BFILE-gegevenstype die het onderscheiden van een LOB-gegevenstype zijn:

  • Bevat ongestructureerde gegevens.

  • Ondersteunt segmentering aan de serverzijde.

  • Maakt gebruik van semantiek voor verwijzingskopie. Als u bijvoorbeeld een kopieerbewerking uitvoert op een BFILE, wordt alleen de BFILE-locator (een verwijzing naar het bestand) gekopieerd. De gegevens in het bestand worden niet gekopieerd.

Het gegevenstype BFILE moet worden gebruikt voor het verwijzen naar LOBs die groot zijn en daarom niet praktisch zijn om op te slaan in de database. Er is meer overhead voor client, server en communicatie betrokken bij het gebruik van een BFILE-gegevenstype vergeleken met het LOB-gegevenstype . Het is efficiënter om toegang te krijgen tot een BFILE als u slechts een kleine hoeveelheid gegevens hoeft te verkrijgen. Het is efficiënter om toegang te krijgen tot database-residente LOBs als u het hele object wilt verkrijgen.

Elk niet-NULL OracleBFile-object is gekoppeld aan twee entiteiten die de locatie van het onderliggende fysieke bestand definiëren:

  1. Een Oracle DIRECTORY-object, een databasealias voor een map in het bestandssysteem, en

  2. De bestandsnaam van het onderliggende fysieke bestand, dat zich in de map bevindt die is gekoppeld aan het MAP-object.

Opmerking

In het volgende C#-voorbeeld ziet u hoe u een BFILE in een Oracle-tabel kunt maken en deze vervolgens kunt ophalen in de vorm van een OracleBFile-object . In het voorbeeld ziet u hoe u het OracleDataReader object en de methoden OracleBFile Seek en Read gebruikt . Als u dit voorbeeld wilt gebruiken, moet u eerst een map maken met de naam c:\\bfiles en het bestand met de naam 'MyFile.jpg' op de Oracle-server.

using System;  
using System.IO;  
using System.Data;  
using System.Data.OracleClient;  
  
public class Sample  
{  
   public static void Main(string[] args)  
   {  
      OracleConnection connection = new OracleConnection(  
        "Data Source=Oracle8i;Integrated Security=yes");  
      connection.Open();  
  
      OracleCommand command = connection.CreateCommand();  
      command.CommandText =
        "CREATE or REPLACE DIRECTORY MyDir as 'c:\\bfiles'";  
      command.ExecuteNonQuery();  
      command.CommandText =
        "DROP TABLE MyBFileTable";  
      try {  
        command.ExecuteNonQuery();  
      }  
      catch {  
      }  
      command.CommandText =
        "CREATE TABLE MyBFileTable(col1 number, col2 BFILE)";  
      command.ExecuteNonQuery();  
      command.CommandText =
        "INSERT INTO MyBFileTable values ('2', BFILENAME('MyDir', " +  
        "'MyFile.jpg'))";  
      command.ExecuteNonQuery();  
      command.CommandText = "SELECT * FROM MyBFileTable";  
  
        byte[] buffer = new byte[100];  
  
      OracleDataReader reader = command.ExecuteReader();  
      using (reader) {  
          if (reader.Read()) {  
                OracleBFile bFile = reader.GetOracleBFile(1);  
                using (bFile) {  
                  bFile.Seek(0, SeekOrigin.Begin);  
                  bFile.Read(buffer, 0, 100);  
              }  
          }  
      }  
  
      connection.Close();  
   }  
  
}  

Zie ook