Oracle BFILEs
O Provedor de Dados do .NET Framework para Oracle inclui a OracleBFile classe, que é usada para trabalhar com o tipo de dados Oracle BFile .
O tipo de dados Oracle BFILE é um tipo de dados Oracle LOB que contém uma referência a dados binários com um tamanho máximo de 4 gigabytes. Um Oracle BFILE difere de outros tipos de dados Oracle LOB porque seus dados são armazenados em um arquivo físico no sistema operacional em vez de no servidor. Observe que o tipo de dados BFILE fornece acesso somente leitura aos dados.
Outras características de um tipo de dados BFILE que o distinguem de um tipo de dados LOB são que:
Contém dados não estruturados.
Suporta fragmentação do lado do servidor.
Usa semântica de cópia de referência. Por exemplo, se você executar uma operação de cópia em um BFILE, somente o localizador BFILE (que é uma referência ao arquivo) será copiado. Os dados no arquivo não são copiados.
O tipo de dados BFILE deve ser usado para referenciar LOBs que são grandes em tamanho e, portanto, não são práticos para armazenar no banco de dados. Mais sobrecarga de cliente, servidor e comunicação está envolvida ao usar um tipo de dados BFILE em comparação com o tipo de dados LOB . É mais eficiente acessar um BFILE se você só precisa obter uma pequena quantidade de dados. É mais eficiente acessar LOBs residentes no banco de dados se você precisar obter o objeto inteiro.
Cada objeto OracleBFile não NULL está associado a duas entidades que definem o local do arquivo físico subjacente:
Um objeto Oracle DIRECTORY, que é um alias de banco de dados para um diretório no sistema de arquivos, e
O nome do arquivo físico subjacente, que está localizado no diretório associado ao objeto DIRECTORY.
Exemplo
O exemplo C# a seguir demonstra como você pode criar um BFILE em uma tabela Oracle e, em seguida, recuperá-lo na forma de um objeto OracleBFile . O exemplo demonstra o uso do OracleDataReader objeto e os métodos OracleBFile Seek and Read. Observe que, para usar este exemplo, você deve primeiro criar um diretório chamado "c:\\bfiles" e um arquivo chamado "MyFile.jpg" no servidor 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();
}
}