使用 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 类型有 OracleBlob、OracleClob 和 OracleBFile。可以通过调用 OracleDataReader 类的适当类型的存取程序来获取 ODP.NET LOB 对象。要使用 ODP.NET 对象更新 LOB(除了 BFile),必须启动一个事务处理。然后必须锁定 LOB 列所在的行。可以使用 OracleDataReader 类的 GetOracleBlobForUpdate 类型的存取程序来执行锁定。GetOracleBlobForUpdate 也会返回一个可更新的 BLOB 对象。要更新数据库中的数据,用户可以提交事务处理。
在这个示例程序情景中,为用户提供了一列产品。用户可以选择一个产品,为该产品选择一个图像并将该图像更新到数据库中。为了进行更新,需要获取一个 OracleBlob 对象、启动一个事务处理并使用 GetOracleBlobForUpdate。在提交了事务处理之后,变化就写入数据库并解除锁定。这演示了如何使用 ODP.NET LOB 对象更新 LOB。
连接池指的是对数据库连接的缓存。这允许重用物理连接并减少您的应用程序的开支。在默认情况下,ODP.NET 中的连接池是启用的。为了控制 ODP.NET 中的连接池的行为,可以设置 MinPoolSize、IncrPoolSize 等属性。在这个示例程序中,可以在 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 资源模板 |
|