Bagikan melalui


Oracle BFILE

Penyedia Data .NET Framework untuk Oracle menyertakan kelas OracleBFile, yang digunakan untuk bekerja dengan tipe data BFile Oracle.

Tipe data Oracle BFILE adalah tipe data Oracle LOB yang berisi referensi ke data biner dengan ukuran maksimum 4 gigabyte. Oracle BFILE berbeda dengan tipe data Oracle LOB lainnya karena datanya disimpan dalam file fisik di sistem operasi, bukan di server. Perhatikan bahwa tipe data BFILE menyediakan akses baca-saja ke data.

Karakteristik lain dari tipe data BFILE yang membedakannya dari tipe data LOB adalah:

  • Berisi data yang tidak terstruktur.

  • Mendukung chunking sisi server.

  • Menggunakan semantik salinan referensi. Misalnya, jika Anda melakukan operasi penyalinan pada BFILE, hanya pencari lokasi BFILE (yang merupakan referensi ke file) yang disalin. Data dalam file tidak disalin.

Tipe data BFILE harus digunakan untuk mereferensikan LOB yang berukuran besar, dan oleh karena itu, tidak praktis untuk disimpan dalam database. Lebih banyak klien, server, dan komunikasi overhead yang terlibat saat menggunakan tipe data BFILE dibandingkan dengan tipe data LOB. Akan lebih efisien untuk mengakses BFILE jika Anda hanya perlu mendapatkan sedikit data. Lebih efisien untuk mengakses LOB database-residen jika Anda perlu mendapatkan seluruh objek.

OracleBFile non-NULL dikaitkan dengan dua entitas yang menentukan lokasi file fisik yang mendasarinya:

  1. Objek Oracle DIRECTORY, yang merupakan alias database untuk direktori dalam sistem file, dan

  2. Nama file dari file fisik yang mendasarinya, yang terletak di direktori yang terkait dengan objek DIRECTORY.

Contoh

Contoh C# berikut menunjukkan bagaimana Anda dapat membuat BFILE dalam tabel Oracle dan kemudian mengambilnya kembali dalam bentuk objek OracleBFile. Contoh menunjukkan penggunaan OracleDataReader objek dan metode OracleBFile Seek and Read . Perhatikan bahwa untuk menggunakan sampel ini, Anda harus terlebih dahulu membuat direktori bernama "c:\\bfiles" dan file bernama "MyFile.jpg" di server 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();  
   }  
  
}  

Lihat juga