Oracle BFILE

Oracle için .NET Framework Veri Sağlayıcısı, Oracle BFile veri türüyle çalışmak için kullanılan sınıfını içerirOracleBFile.

Oracle BFILE veri türü, en fazla 4 gigabayt boyutunda ikili verilere başvuru içeren bir Oracle LOB veri türüdür. Oracle BFILE , verilerinin sunucu yerine işletim sistemindeki fiziksel bir dosyada depolanması bakımından diğer Oracle LOB veri türlerinden farklıdır. BFILE veri türünün verilere salt okunur erişim sağladığını unutmayın.

Bir BFILE veri türünün lob veri türünden ayıran diğer özellikleri şunlardır:

  • Yapılandırılmamış veriler içerir.

  • Sunucu tarafı öbekle işlemini destekler.

  • Başvuru kopyalama semantiğini kullanır. Örneğin, bir BFILE üzerinde kopyalama işlemi gerçekleştirirseniz, yalnızca BFILE bulucu (dosyaya başvurudur) kopyalanır. Dosyadaki veriler kopyalanmaz.

BFILE veri türü, boyutu büyük olan LOB'lere başvurmak için kullanılmalıdır ve bu nedenle veritabanında depolamak pratik değildir. LOB veri türüyle karşılaştırıldığında BFILE veri türü kullanılırken daha fazla istemci, sunucu ve iletişim yükü söz konusudur. Yalnızca az miktarda veri almanız gerekiyorsa BFILE'a erişmek daha verimlidir. Nesnenin tamamını almanız gerekiyorsa veritabanı yerleşik LOB'lerine erişmek daha verimlidir.

NULL olmayan her OracleBFile nesnesi, temel alınan fiziksel dosyanın konumunu tanımlayan iki varlıkla ilişkilendirilir:

  1. Dosya sistemindeki bir dizinin veritabanı diğer adı olan Oracle DIRECTORY nesnesi ve

  2. DIRECTORY nesnesiyle ilişkili dizinde bulunan temel alınan fiziksel dosyanın dosya adı.

Örnek

Aşağıdaki C# örneği, Bir Oracle tablosunda BFILE oluşturup oraclebfile nesnesi biçiminde nasıl alabildiğinizi gösterir. Örnekte nesnesinin OracleDataReader ve OracleBFileSeek ve Read yöntemlerinin kullanılması gösterilmektedir. Bu örneği kullanmak için önce Oracle sunucusunda "c:\\bfiles" adlı bir dizin ve "MyFile.jpg" adlı bir dosya oluşturmanız gerektiğini unutmayın.

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

Ayrıca bkz.