使用 ODP.NET LOB 对象更新 LOB 示例

目录

示例应用程序目标

返回页首

本示例程序的目的是演示:

1) 如何使用 Oracle Data Provider for .NET (ODP.NET) LOB 对象更新 LOB?

2) 如何在 ODP.NET 中启用连接池?

示例应用程序概述

返回页首

ODP.NET 提供了一种独特的特性,可使用 ODP.NET LOB 类型来访问和操纵图像、声音文件等大型对象 (LOB)。ODP.NET LOB 类型有 OracleBlobOracleClobOracleBFile。可以通过调用 OracleDataReader 类的适当类型的存取程序来获取 ODP.NET LOB 对象。要使用 ODP.NET 对象更新 LOB(除了 BFile),必须启动一个事务处理。然后必须锁定 LOB 列所在的行。可以使用 OracleDataReader 类的 GetOracleBlobForUpdate 类型的存取程序来执行锁定。GetOracleBlobForUpdate 也会返回一个可更新的 BLOB 对象。要更新数据库中的数据,用户可以提交事务处理。

在这个示例程序情景中,为用户提供了一列产品。用户可以选择一个产品,为该产品选择一个图像并将该图像更新到数据库中。为了进行更新,需要获取一个 OracleBlob 对象、启动一个事务处理并使用 GetOracleBlobForUpdate。在提交了事务处理之后,变化就写入数据库并解除锁定。这演示了如何使用 ODP.NET LOB 对象更新 LOB。

连接池指的是对数据库连接的缓存。这允许重用物理连接并减少您的应用程序的开支。在默认情况下,ODP.NET 中的连接池是启用的。为了控制 ODP.NET 中的连接池的行为,可以设置 MinPoolSizeIncrPoolSize 等属性。在这个示例程序中,可以在 ConnectionParams.vb 类文件里设置连接池属性。

带有屏幕截图的用户附注

返回页首

运行此示例程序时,会出现一个列表框,列表项是来自表 "Printmedia" 中的产品,如图 1.1 所示。用户可以从列表中选择一个产品并点击 "View/ Update Image" 按钮,这将使控件转到 "ImgForm" 表单。可以点击 "Close Form" 按钮关闭此表单。


图 1.1:此示例程序的初始屏幕的截图

在 "ImgForm" 表单,如果所选产品的图像存在,那么它会出现在 "Existing Image" 图像框中,否则 "Existing Image" 图像框显示空白。要给产品更新一个图像,用户可以通过点击 "Browse" 按钮选择一个图像。要加载并查看此图像,用户需要点击 "Load Image" 按钮。新的图像将会出现在 "New Image" 图像框中。如图 1.2 所示。


图 1.2:显示所选产品的现有图像和新图像

用户可以点击 "Save" 按钮将新图像保存到数据库。成功地更新了 LOB 之后,表单上会出现消息 "Data Saved Successfully"。同时,保存的图像会出现在 "Existing Image" 图像框,而 "New Image" 图像框则被清空,如图 1.3 所示。如果要选择其它产品进行更新,用户可以点击 "Back" 按钮。这将使控件返回 "ProductForm" 表单。

图 1.3:更新图像后的屏幕截图

所需软件

返回页首
  • Microsoft Internet Information Services (IIS) 5.0 或更新版本,安装在 Microsoft Windows 2000 环境(打了 Service Pack 2 或更新补丁)。

  • 与 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)(可以在此下载)。

  • 任何 Web 浏览器,如 Internet Explorer 5.5 或更新版本

提取示例

返回页首

使用 Winzip 或者命令行工具把 UpdLob.zip 解压缩到您指定的一个目录,<Extract_Dir> 来指代此目录。解压缩此 zip 文件后会产生 "UpdLob" 目录。更多详细信息请参阅示例文件的说明部分。

数据库设置

返回页首

以任意用户身份连接到您的数据库并在 SQL 提示符上运行脚本 UpdLob\config\DatabaseSetup.sql
SQL> @<Extract_Dir>\UpdLob\config\DatabaseSetup.sql

此脚本将会提示用户输入用户名、密码和连接字符串。您可以选择任何存在的用户名。在指定的用户模式中将创建表。通过运行 DatabaseSetup.sql 文件创建了 Printmedia 表。

注意:为了使设置更简单,Printmedia 表中不包含图像。

准备并运行示例

返回页首

1. 确保数据库设置已经完成。

2. 为了从 IIS 发布您的工程,必须创建一个虚拟目录。虚拟目录是一个共享资源,它由一个别名指定,此别名代表服务器上的一个物理位置。按照下面给出的步骤为此示例创建一个虚拟目录:

  • 进入开始菜单 -> 设置 -> 控制面板 -> 管理工具 -> 互联网服务管理器 -> Internet Information Services -> <Host Name> -> 默认网站。用鼠标右键点击默认网站并选择新建 -> 虚拟目录。
  • 启动虚拟目录创建向导。
  • 为 Web 虚拟目录取一个别名 UpdLob。点击下一步。
  • 输入位置 <Extract_Dir>\UpdLob,使别名与此物理位置相关联。点击下一步。<Extract_Dir> 是您解压缩此示例程序的目录。
  • 确保为这个虚拟目录设置了读取、运行脚本访问许可。点击下一步。点击结束。
  • 虚拟目录创建完毕。

3. 打开 Visual Studio.NET。要创建一个新的 web 工程,点击 File-> New-> Project-> Visual Basic Projects-> ASP.NET Web Application,并将工程位置映射到您的虚拟目录,

例如 http://<Server-Name>/UpdLob/src/UpdLob,其中

<Server-Name> 是符合您的 IIS 安装的主机名或 IP 地址。

UpdLob 是将要发布您的工程的目录。(在上一步骤中创建)

/src/UpdLob 是将要创建您的工程的目录。

点击 OK。

4. 要将此示例程序添加到您的工程,进入 File -> Add Existing 项。在文件对话框中从 <Extract_Dir>\UpdLob\src\UpdLob 选择此示例文件。选择 ConnectionManager.vb, ConnectionParams.vb, Error.*, GetImage.*, ImgForm.*, ProductForm.* 文件并将它们添加到您的工程。要查看添加的文件,进入 Solution Explorer 并点击图标栏上的 "Show All Files" 按钮。

5. 在 Solution Explorer 中,双击 ConnectionParams.vb 文件以编辑它。按照数据库设置中的值来更改数据库连接参数,如 UserName、Password、TNSName。再根据您的需要更改连接池参数。保存此文件。

6. 在 Solution Explorer 中选择 ProductForm.aspx。用鼠标右键点击 ProductForm.aspx 并从弹出菜单中选择 "Set As Start Page"。

7. 确保下列 .NET 组件引用已经被添加到您创建的工程中:

  • System
  • System.Data
  • Oracle.DataAccess
  • System.Web
  • System.XML
  • System.Drawing
要添加上面的 .NET 组件:
  • 进入 Menu ->View-> Solution Explorer。
  • 用鼠标右键点击您创建的工程,并选择 "Add Reference"。
  • 从出现的列表中选择上面的 .NET 组件。
  • 点击 "Select",然后点击 OK。
  • 选中的 .NET 组件被添加到工程。

8. 进入 Menu -> Build -> Build project UpdLob 编译此示例。然后点击 Debug->Start Without Debugging 在 Visual Studio.NET 环境中运行此示例。或者在 web 浏览器中输入下面的 URL 手动运行此示例。
http://<Server-Name>/UpdLob/src/UpdLob/ProductForm.aspx

例如http://152.69.170.237/UpdLob/src/UpdLob/ProductForm.aspx

示例文件的说明

返回页首

下面是 UpdLob.zip 的目录结构:

目录 文件 说明
UpdLob\doc\ Readme.html 本文件
otn.css Readme.html 应用的层叠样式表
UpdLob\doc\images\ *.gif 在 Readme.html 文件中使用的屏幕截图
UpdLob\config DatabaseSetup.sql 包含创建此示例所需的数据库对象的脚本
UpdLob\src\UpdLob\ ProductForm.aspx 显示产品列表的 Web 表单
Error.aspx 处理错误的 Web 表单
GetImage.aspx 此文件为检索的图像返回一个二进制流
Imgform.aspx 该 web 表单包含显示现有图像和新图像的用户界面。
ImgForm.aspx.vb 包含更新数据库中的 LOB 的代码
ConnectionManager.vb 包含建立和关闭与数据库连接的方法。
ConnectionParams.vb 包含用户定义的数据库连接参数
GetImage.aspx.vb 包含从数据库中检索产品图像并返回二进制流的代码
ProductForm.aspx.vb 包含显示产品列表的代码
Error.aspx.vb 与 error.aspx 对应的 Code Behind 文件
*.resx .NET XML 资源模板


寄送此页面
Printer View 打印机视图