包括所需命名空间:在 .cs 或 .vb 文件中的‘一般声明’部分中添加对命名空间的引用非常值得,这样可避免以后在脚本中限定其使用:
| C# |
using System;
using System.Text;
using Oracle.DataAccess.Types;
using Oracle.DataAccess.Client;
|
| Visual Basic .NET |
Imports System
Imports System.Text
Imports Oracle.DataAccess.Types
Imports Oracle.DataAccess.Client
|
1. 建立一个到数据库的连接:
| C# |
// 第 1 步
// 使用 ODP.NET 建立连接
// 注意:按照您数据库的设置
// 修改用户 Id、口令、数据源
string connectStr = "User Id=Scott;Password=tiger;Data Source=orcl9i";
OracleConnection connection = new OracleConnection(connectStr);
connection.Open();
Console.WriteLine("connected to database");
Console.WriteLine(" ");
|
| Visual Basic .NET |
' 第 1 步
' 使用 ODP.NET 建立连接
' 注意:按照您数据库的设置
' 修改用户 Id、口令、数据源
Dim connectStr As String = "User Id=Scott;Password=tiger;Data Source=orcl9i"
' 初始化连接
Dim connection As OracleConnection = New OracleConnection(connectStr)
connection.Open()
Console.WriteLine("connected to database")
Console.WriteLine(" ")
|
2. 声明所需的 Oracle 对象:
| C# |
// 第 2 步
// 声明 Oracle 对象
OracleTransaction txn;
OracleCommand cmd = new OracleCommand("",connection);
OracleDataReader reader;
OracleClob clob;
|
| Visual Basic .NET |
' 第 2 步
' 声明 Oracle 对象
Dim txn As OracleTransaction
Dim cmd As OracleCommand = New OracleCommand("", connection)
Dim reader As OracleDataReader
Dim clob As OracleClob
|
3. 任何 LOB 更新都需要一个 Oracle 事务。所以,下面开始事务处理:
| C# |
// 第 3 步
// 启动事务处理
txn = connection.BeginTransaction();
|
| Visual Basic .NET |
' 第 3 步
' 启动事务处理
txn = connection.BeginTransaction()
|
4. 使用 FOR UPDATE 语句以锁定用于更新的整个结果集。然后执行如下语句:
| C# |
// 第 4 步
// 使用 FOR UPDATE 子句锁定结果集
cmd.CommandText = "SELECT story FROM multimedia_tab FOR UPDATE";
reader = cmd.ExecuteReader();
|
| Visual Basic .NET |
' 第 4 步
' 使用 FOR UPDATE 子句锁定结果集
cmd.CommandText = "SELECT story FROM multimedia_tab FOR UPDATE"
reader = cmd.ExecuteReader()
|
5. 将数据读入 Oracle LOB 对象:
| C# |
// 第 5 步
// 使用类型正确的 Oracle LOB 对象的存取器
// 读取 OracleDataReader 中的数据
reader.Read();
clob = reader.GetOracleClob(0);
Console.WriteLine("Old Data:{0}", clob.Value);
Console.WriteLine(" ");
|
| Visual Basic .NET |
' 第 5 步
' 使用类型正确的 Oracle LOB 对象的存取器
' 读取 OracleDataReader 中的数据
reader.Read()
clob = reader.GetOracleClob(0)
Console.WriteLine("Old Data:{0}", clob.Value)
Console.WriteLine(" ")
|
6. 修改然后提交 OracleCLOB 当前例程中的数据。自动提交事务将释放此锁:
| C# |
// 第 6 步
// 修改该行的 CLOB 列
string ending = " The end.";
// 将 CLOB 数据追加到当前 OracleCLOB 实例
clob.Append(ending.ToCharArray(), 0, ending.Length);
// 释放锁
txn.Commit();
Console.Write("Updated to new data:");
|
| Visual Basic .NET |
' 第 6 步
' 修改该行的 CLOB 列
Dim ending As String = " The end."
' 将 CLOB 数据追加到当前 OracleCLOB 实例
clob.Append(ending.ToCharArray(), 0, ending.Length)
' 释放锁
txn.Commit()
Console.Write("Updated to new data:")
|
7. 从数据库中取出修改了的数据然后将其显示在控制台上:
| C# |
// 第 7 步
// 从数据库提取修改的数据
// 使用 FOR UPDATE 子句锁定整个结果集
cmd.CommandText = "SELECT story FROM multimedia_tab FOR UPDATE";
reader = cmd.ExecuteReader();
reader.Read();
clob = reader.GetOracleClob(0);
Console.WriteLine(clob.Value);
Console.WriteLine(" ");
|
| Visual Basic .NET |
' 第 7 步
' 从数据库提取修改的数据
' 使用 FOR UPDATE 子句锁定整个结果集
cmd.CommandText = "SELECT story FROM multimedia_tab FOR UPDATE"
reader = cmd.ExecuteReader()
reader.Read()
clob = reader.GetOracleClob(0)
Console.WriteLine(clob.Value)
Console.WriteLine(" ")
|
8. 将 CLOB 对象的当前实例重置为旧数据:
| C# |
// 第 8 步
// 使用旧值重置数据
// 启动 Oracle 事务处理
txn = connection.BeginTransaction();
// 清空 OracleCLOB
// 当前实例
clob.Erase();
// 将字符串重写为旧值
StringBuilder blr1 = new StringBuilder();
blr1.Append("'This is a long story.Once upon a time ...',");
String oldData = blr1.ToString();
|
| Visual Basic .NET |
' 第 8 步
' 使用旧值重置数据
' 启动 Oracle 事务处理
txn = connection.BeginTransaction()
' 清空 OracleCLOB
' 当前实例
clob.Erase()
' 将字符串重写为旧值
Dim blr1 As StringBuilder = New StringBuilder()
blr1.Append("'This is a long story.Once upon a time ...',")
Dim oldData As String = blr1.ToString()
|
9. 提交事务将自动释放此锁。随后在控制台上显示旧数据:
| C# |
// 第 9 步
// 将字节数组写入 OracleCLOB 对象
clob.Write(oldData.ToCharArray(),0, oldData.Length);
// 更新数据、释放锁
txn.Commit();
Console.WriteLine("Old Data again:{0}", clob.Value);
|
| Visual Basic .NET |
' 第 9 步
' 将字节数组写入 OracleCLOB 对象
clob.Write(oldData.ToCharArray(), 0, oldData.Length)
' 更新数据、释放锁
txn.Commit()
Console.WriteLine("Old Data again:{0}", clob.Value)
|
1. 打开 Visual Studio.NET。
2. 创建控制台应用程序项目:
| C# |
用 C# 创建一个控制台应用程序项目。默认情况下系统将 Class1.cs 添加到项目中。 |
| Visual Basic .NET |
用 Visual Basic .NET 创建控制台应用程序项目。默认情况下系统将 Module1.vb 添加到项目中。
|
3. 请确保您的项目包含对 System、Oracle.DataAccess 及 System.Data 命名空间的引用。如果这些引用不存在,请添加对这些命名空间的引用。
4. 复制代码:
| C# |
|
使用 Solution Explorer 打开 Class1.cs。有关为此方法文章用 C# 编写的代码的完整清单,请单击这里。复制此代码并覆盖 Class1.cs 的内容。
|
| Visual Basic .NET |
使用 Solution Explorer 打开 Module1.vb。有关为此方法文章用 VB.NET 编写的代码的完整清单,请单击这里。复制此代码并覆盖 Module1.vb 的内容。
|
5. 按照代码的第 1 步中的数据库设置修改用户 Id、口令及数据源。
6. 要编译并运行此应用程序,请按下 Ctrl+F5。这将显示旧数据和新数据,如图 1.1 所示:

图 1.1 – 输出的屏幕截图