Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Поставщик данных .NET Framework для Oracle содержит класс OracleBFile, который используется для работы с типом данных Oracle BFile.
Тип данных Oracle BFILE — это тип данных Oracle LOB, содержащий ссылку на двоичные данные с максимально возможным размером 4 гигабайта. Oracle BFILE отличается от других типов данных Oracle LOB в том, что его данные хранятся в физическом файле в операционной системе, а не на сервере. Обратите внимание, что тип данных BFILE предоставляет доступ только для чтения к данным.
Другие характеристики типа данных BFILE, которые отличают его от типа данных LOB, заключаются в следующем:
содержит неструктурированные данные;
поддерживает обработку данных на сервере в виде фрагментов;
использует семантику ссылки. Например, при выполнении операции копирования в BFILE копируется только указатель BFILE (который является ссылкой на файл). Данные файла не копируются.
Тип данных BFILE должен использоваться для ссылок на LOB, которые имеют большой размер, и поэтому непрактично хранить их в базе данных. При использовании типа данных BFILE по сравнению с типом данных LOB возникает больше дополнительных затрат на клиент, сервер и обмен данными. Более эффективно получить доступ к BFILE , если требуется получить только небольшой объем данных. Доступ к LOB-объектам, находящимся в базе данных, более эффективен, если нужно получить целый объект.
Каждый объект OracleBFile, отличный от NULL, связан с двумя сущностями, определяющими расположение базового физического файла:
Объект Oracle DIRECTORY, который является псевдонимом базы данных для каталога в файловой системе.
Имя файла базового физического файла, расположенного в каталоге, связанном с объектом DIRECTORY.
Пример
В следующем примере C# показано, как создать BFILE в таблице Oracle, а затем получить его в виде объекта OracleBFile . В примере демонстрируется использование OracleDataReader объекта и методов OracleBFileSeek и Read . Обратите внимание, что для использования этого примера необходимо сначала создать каталог с именем c:\\bfiles и файл с именем "MyFile.jpg" на сервере 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();
}
}