Sdílet prostřednictvím


Soubory Oracle BFILE

Rozhraní .NET Framework Zprostředkovatel dat pro Oracle obsahuje OracleBFile třídu, která se používá k práci s datovým typem OracleBFile.

Datový typ Oracle BFILE je datový typ Oracle LOB , který obsahuje odkaz na binární data s maximální velikostí 4 gigabajty. Oracle BFILE se liší od jiných datových typů Oracle LOB v tom, že jeho data jsou uložena ve fyzickém souboru v operačním systému místo na serveru. Všimněte si, že datový typ BFILE poskytuje přístup k datům jen pro čtení.

Mezi další charakteristiky datového typu BFILE , které jej odlišují od datového typu LOB , patří:

  • Obsahuje nestrukturovaná data.

  • Podporuje bloky dat na straně serveru.

  • Používá sémantiku kopírování odkazu. Pokud například provedete operaci kopírování v souboru BFILE, zkopíruje se pouze lokátor BFILE (což je odkaz na soubor). Data v souboru se nekopírují.

Datový typ BFILE by se měl použít pro odkazování na loby, které mají velkou velikost, a proto není praktické ukládat do databáze. Při použití datového typu BFILE v porovnání s datovým typem LOB je zapojeno více režijních nákladů na klienty, server a komunikaci. Přístup k souboru BFILE je efektivnější, pokud potřebujete získat pouze malé množství dat. Pokud potřebujete získat celý objekt, je efektivnější získat přístup k databázím rezidentům LOB.

Každý objekt OracleBFile bez null je přidružen ke dvěma entitami, které definují umístění základního fyzického souboru:

  1. Objekt Oracle DIRECTORY, což je alias databáze pro adresář v systému souborů a

  2. Název souboru základního fyzického souboru, který se nachází v adresáři přidruženém k objektu DIRECTORY.

Příklad

Následující příklad jazyka C# ukazuje, jak můžete vytvořit soubor BFILE v tabulce Oracle a pak jej načíst ve formě objektu OracleBFile . Příklad ukazuje použití objektu OracleDataReader a OracleBFile Seek a Read metody. Abyste mohli tuto ukázku použít, musíte nejprve vytvořit adresář s názvem c:\\bfiles a soubor s názvem "MyFile.jpg" na serveru Oracle.

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

Viz také