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:
Objekt Oracle DIRECTORY, což je alias databáze pro adresář v systému souborů a
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();
}
}