OracleBFile 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示托管 OracleBFile 对象,该对象的设计旨在与 Oracle BFILE
数据类型配合使用。 此类不能被继承。
public ref class OracleBFile sealed : System::IO::Stream, ICloneable, System::Data::SqlTypes::INullable
public sealed class OracleBFile : System.IO.Stream, ICloneable, System.Data.SqlTypes.INullable
type OracleBFile = class
inherit Stream
interface ICloneable
interface IDisposable
interface INullable
type OracleBFile = class
inherit Stream
interface ICloneable
interface INullable
interface IDisposable
Public NotInheritable Class OracleBFile
Inherits Stream
Implements ICloneable, INullable
- 继承
- 实现
注解
Oracle BFILE
数据类型是一种 Oracle LOB
数据类型,其中包含对二进制数据的引用,最大大小为 4 GB。 Oracle BFILE
与其他 Oracle LOB
数据类型的不同之处在于,其数据存储在操作系统中的物理文件中,而不是存储在服务器上。 请注意, BFILE
数据类型提供对数据的只读访问。 因此,不支持从 Stream 类继承的面向写入的方法。
将其与LOB
数据类型区分开的数据类型的其他特征BFILE
是:
包含非结构化数据。
支持服务器端分块。
使用引用复制语义。 例如,如果在 上
BFILE
执行复制操作,则仅BFILE
复制定位符 (,它是对文件) 的引用。 而不会复制文件中的数据。
数据类型 BFILE
应该用于引用 LOB
大号的 ,因此,在数据库中存储不切实际。 与数据类型相比LOB
,使用BFILE
数据类型会产生客户端、服务器和通信开销。 如果只需要获取少量数据, BFILE
则访问 会更高效。 如果需要获取整个对象,则访问数据库驻留 LOB
的 会更高效。
每个非 NULL OracleBFile 对象都与定义基础物理文件位置的两个实体相关联:
一个 Oracle DIRECTORY 对象,它是文件系统中一个目录的数据库别名,以及
基础物理文件的文件名,它位于与 DIRECTORY 对象关联的目录中。
BFILE
创建 后,可以使用 或 ExecuteScalar 方法以 对象ExecuteReader的形式OracleBFile检索其定位符。
若要获取 OracleBFile 对象,请 GetOracleBFile 调用 方法。
在尝试访问对象之前, OracleBFile 与对象关联的物理文件不需要存在。 应用程序可以将 绑定到 OracleBFile 不存在的文件,在预期位置创建物理文件,然后调用 Read。
任何使用 Read 或 Seek 方法访问已关闭OracleBFile的 的尝试都会OracleBFile自动重新打开流。
下面的 C# 示例演示如何在 Oracle 表中创建 BFILE
,然后以 对象的形式 OracleBFile 检索它。 该示例演示如何使用 OracleDataReader 对象和 OracleBFileSeek 和 Read 方法。
private void GetOracleBFile(string connectionString)
{
//Create and open the connection.
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
//Create and execute the commands.
OracleCommand command = connection.CreateCommand();
command.CommandText = "CREATE OR REPLACE DIRECTORY TestDir AS 'c:\\bfiles'";
command.ExecuteNonQuery();
command.CommandText = "CREATE TABLE TestTable(col1 number, col2 BFILE)";
command.ExecuteNonQuery();
command.CommandText = "INSERT INTO TestTable VALUES ('2', BFILENAME('TESTDIR', 'File.jpg'))";
command.ExecuteNonQuery();
command.CommandText = "SELECT * FROM TestTable";
//Read the BFile data.
byte[] buffer = new byte[100];
OracleDataReader dataReader = command.ExecuteReader();
using (dataReader)
{
if (dataReader.Read())
{
OracleBFile BFile = dataReader.GetOracleBFile(1);
using (BFile)
{
BFile.Seek(0, SeekOrigin.Begin);
BFile.Read(buffer, 0, 100);
}
}
}
}
return;
}
有关创建和使用 Oracle BFILE
的详细信息,请参阅 Oracle 文档中的相应主题。
注意
BeginWrite
不支持从 System.IO.Stream
类继承的 、 EndWrite
和 WriteByte
方法,因为BFILE
数据类型是只读的。
字段
Null |
表示空 OracleBFile 对象,该对象没有绑定到物理文件。 |
属性
CanRead |
获取一个值,该值指示 |
CanSeek |
获取一个值,该值指示能否执行向前和向后查找操作。 |
CanTimeout |
获取一个值,该值确定当前流是否可以超时。 (继承自 Stream) |
CanWrite |
获取一个值,该值指示对象是否支持写入。 |
Connection |
获取由该 OracleConnection 实例使用的 OracleBFile。 |
DirectoryName |
获取与 OracleBFile 对象相关联的 DIRECTORY 对象的名称。 |
FileExists |
获取一个值,该值指示操作系统中是否存在包含 |
FileName |
获取 |
IsNull |
获取一个值,该值指示 OracleBFile 是否为一个 Null 流。 |
Length |
获取一个值,该值返回与 OracleBFile 对象关联的物理文件的长度(以字节为单位)。 |
Position |
获取 OracleBFile 流中的当前读取位置。 |
ReadTimeout |
获取或设置一个值(以毫秒为单位),该值确定流在超时前将尝试读取的时间。 (继承自 Stream) |
Value |
获取 Array 类型的 Byte(它包含 OracleBFile 数据)。 |
WriteTimeout |
获取或设置一个值(以毫秒为单位),该值确定流在超时前将尝试写入多长时间。 (继承自 Stream) |
方法
显式接口实现
IDisposable.Dispose() |
释放由 Stream 使用的所有资源。 (继承自 Stream) |
扩展方法
CopyToAsync(Stream, PipeWriter, CancellationToken) |
使用取消令牌从 Stream 中异步读取字节并将其写入到指定的 PipeWriter。 |