通过 ODP.NET 访问 BFILE 示例
目录
本示例程序的目的是演示:
1) 如何通过 ODP.NET 插入 BFILE 数据?
2) 如何通过 ODP.NET 查看 BFILE 数据?
大型对象 (LOB) 用于存储非结构化的数据,如文本、图形图像、视频剪辑等等。BFILE 是一种外部 LOB,用于存储位于数据库表空间之外的操作系统文件中的大型二进制数据对象。BFILE 允许对数据库服务器的文件系统中的大型文件进行只读的字节流访问。
ODP.NET 通过 OracleBFile 对象类型提供对 BFILE 的支持。与 Oracle BLOB 和 CLOB 不同,Oracle BFILE 不可更新,但 BFILE 定位器可以更新。
此 Visual Basic .NET 示例展示通过 ODP.NET 访问 BFILE。在运行此示例时会出现一个窗口,用户可以通过这个窗口按照他/她的数据库设置输入一些参数来建立数据库连接。成功连接到数据库后,用户需要输入完整的、合格的路径指明用户希望插入的图像文件在数据库服务器中的位置。点击 "Save Image" 按钮后将创建所需的数据库对象并插入图像。要查看插入的图像,用户可以点击 "Display Image" 按钮,通过 OracleDataReader 的 GetOracleBFile 方法将图像读取到一个 OracleBFile 对象中。状态栏中将显示每一步的消息。
运行示例程序时,将出现一个窗口,按照您的数据库环境输入用户名、密码和连接字符串。点击 "Connect" 按钮。如果连接被成功建立,将显示 "connected" 连接状态,如图 1.1 所示。

图 1.1:屏幕截图显示成功建立连接后的窗口
要插入一个 BFILE,在提供的文本框中输入您拷贝了 "poster.gif" 文件的数据库服务器的目录路径,并点击 "Save Image" 按钮。观察状态栏中的消息。然后点击 "Display Image" 按钮。图像被显示在图片框中,如图 1.2 所示。

图 1.2:显示保存在数据库中的图像的屏幕截图
用户可以使用 "Disconnect" 按钮断开数据库连接。用户可以使用 "Connect" 按钮以不同的用户身份再次连接。用户可以点击 "Exit" 按钮关闭此应用程序。
-
与 MS 开发环境 7.0 版 (MS Visual Studio .NET) 一起安装的 Visual Basic.NET,包括 MS .NET Framework 1.0 版
-
运行 SQL*Net TCP/IP 监听程序(可以在此下载)的 Oracle9i Database Enterprise Edition 或更新版
-
Oracle Data Provider for .NET (ODP.NET)(可以在此下载)。
使用 Winzip 或者命令行工具把 FetchSize.zip 解压缩到您指定的一个目录,用 来指代此目录。解压缩此 zip 文件后会产生 "AccessBFile" 目录。更多详细信息请参阅示例文件的说明部分。
运行此示例需要创建一个 Oracle 数据库对象 "Directory"。任何想要创建此对象的数据库用户都必须由 DBA(例如 SYSTEM 数据库用户)授予一种特殊的 "CREATE ANY DIRECTORY" 权限。
要将此权限授予任何普通数据库用户,如 scott(在此示例中),在 SQL 提示符中输入下列命令:
|
语法:
SQL> CONNECT /@;
SQL> GRANT CREATE ANY DIRECTORY TO ;
例如:
SQL> CONNECT System/Manager@Orcl9i;
SQL> GRANT CREATE ANY DIRECTORY TO scott;
|
|
现在 "Scott" 用户可以运行此示例了。
1. 使用 Visual Studio .NET 从 \AccessBFile 目录打开 AccessBFile.sln。
2. 确保下列 .NET 组件引用已经被添加到 AccessBFile 工程:
System, System.Data, System.Drawing, System.Windows.Forms, Oracle.DataAccess.
要添加上面的 .NET 组件: a) 进入 Menu ->View-> Solution Explorer。 b) 用鼠标右键点击 AccessBFile 工程,选择 'Add Reference'。 c) 从出现的列表中选择上面的 .NET 组件。 d) 点击 'Select',然后点击 OK。 e) 选中的 .NET 组件被添加到工程。
3. 编译并运行示例。
1. 此示例中提供了一个示例图像, poster.gif (BFILE)。将 "poster.gif" 图像文件从 <Extract_Dir>\AccessBfile 文件夹复制到数据库服务器上的某个目录下。记下这个目录,因为稍后在示例中要用到它。
2. 当运行此应用程序时,会显示一个窗口,其中有建立数据库连接和插入/显示 BFILE 之类的工具。
3. 确定您已经完成了数据库设置。
4. 在文本框中输入正确的用户名、密码和数据源并点击 "Connect" 按钮。如果连接被成功建立,将会显示绿色的 "connected" 连接状态。注意:确保您使用的数据库用户具有 "CREATE ANY DIRECTORY" 权限。
5. 将图像 "poster.gif" 插入数据库。输入完整的、合格的路径指明图像文件在数据库服务器中的位置。这就是您在步骤 1 中使用过的数据库服务器上的目录路径。
6. 点击 "Save Image" 按钮将图像插入数据库。下面是插入图像的步骤:
- 创建一个数据库表 Test_Bfile,表中有一个名为 "photo" 的 BFILE 类型的列。
- 按照用户在步骤 5 中输入的路径创建目录 "BFILEDIR"。
- 在表 Test_Bfile 中插入一行,其中包含一个 BFILE 指针。
7. 显示插入到 Test_Bfile 数据库表中的图像。点击 "Display Image" 按钮。下面是显示图像的步骤:
- 从 Test_Bfile 表中选择 BFILE 定位器并存储到 OracleBFile。
- 为选中的 OracleBFile(BFILE 定位器)打开一个内存流。
- 读取图像并在图片框中显示。
1. 如果图像不能正确显示,请检查在文本框中输入的路径。图像 "poster.gif" 必须存储在数据库服务器中。如果您的数据库服务器安装在 Windows 操作系统上,那么象下面这样输入路径:e:\myimages。如果您的数据库服务器安装在 Unix/Linux 操作系统上,则象下面这样输入路径:/home/myimages。按照您的机器设置,这里的 myimages 可以是任何目录。
2. 如果您希望用其它的某个图像来代替 "poster.gif",那么您需要更改代码中的图像名。在 Bfile.vb 文件中,图像名 "poster.gif" 被硬编码在代码中。此示例提供了一种仅用于查看二进制文件(如图像等)的机制。
下面是 AccessBfile.zip 的目录结构:
| 目录 |
文件 |
说明
|
AccessBFile\doc\ |
Readme.html |
本文件 |
otn.css |
Readme.html 应用的层叠样式表 |
AccessBFile\doc\images\ |
*.gif |
在 Readme.html 文件中使用的屏幕截图 |
AccessBFile\ |
AcessBFile.sln |
Visual Studio 解决方案 |
AcessBFile.suo |
解决方案用户选项(在创建 Visual Studio 解决方案时自动生成此文件)。 |
poster.gif |
在此示例中使用的示例图像文件。 |
AccessBFile\src\AccessBFile |
Bfile.vb |
包含访问 BFILE 时使用的 UI 和所有方法的资源文件。 |
Bfile.resx |
.NET XML 资源模板 |
AccessBfile.vbproj |
VB 工程文件 |
AccessBfile.vbproj.user |
Visual Studio 工程用户选项(在创建 Visual Studio 工程时自动生成此文件) |
|