Dela via


Oracle BFILEs

.NET Framework-dataprovidern för Oracle innehåller OracleBFile klassen som används för att arbeta med Oracle-datatypen BFile .

Oracle BFILE-datatypen är en Oracle LOB-datatyp som innehåller en referens till binära data med en maximal storlek på 4 gigabyte. Oracle BFILE skiljer sig från andra Oracle LOB-datatyper eftersom dess data lagras i en fysisk fil i operativsystemet i stället för på servern. Observera att BFILE-datatypen ger skrivskyddad åtkomst till data.

Andra egenskaper hos en BFILE-datatyp som skiljer den från en LOB-datatyp är att den:

  • Innehåller ostrukturerade data.

  • Stöder segmentering på serversidan.

  • Använder referenskopieringssemantik. Om du till exempel utför en kopieringsåtgärd på en BFILE kopieras endast BFILE-positioneraren (som är en referens till filen). Data i filen kopieras inte.

BFILE-datatypen bör användas för att referera till LOB som är stora och därför inte praktiskt att lagra i databasen. Mer klient-, server- och kommunikationskostnader ingår när du använder en BFILE-datatyp jämfört med LOB-datatypen . Det är mer effektivt att komma åt en BFILE om du bara behöver hämta en liten mängd data. Det är mer effektivt att få åtkomst till databasbaserade lob-platser om du behöver hämta hela objektet.

Varje OracleBFile-objekt som inte är NULL associeras med två entiteter som definierar platsen för den underliggande fysiska filen:

  1. Ett Oracle DIRECTORY-objekt, som är ett databasalias för en katalog i filsystemet, och

  2. Filnamnet på den underliggande fysiska filen, som finns i katalogen som är associerad med DIRECTORY-objektet.

Exempel

I följande C#-exempel visas hur du kan skapa en BFILE i en Oracle-tabell och sedan hämta den i form av ett OracleBFile-objekt . Exemplet visar hur du använder objekt- OracleDataReader och OracleBFile Seek- och Read-metoderna. Observera att om du vill använda det här exemplet måste du först skapa en katalog med namnet "c:\\bfiles" och filen med namnet "MyFile.jpg" på Oracle-servern.

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

Se även