DBAVisual Studio .NET 2003.NET 1.1OracleVisual Studio 2005Windows XP.NET 2.0C# 2.0初学者开发Visual StudioWindows.NETC#
使用 C# 将 CLOB 数据插入 Oracle
使用 C# 将 CLOB 数据插入 Oracle 表。
引言
即使是最新版本的 Oracle 数据库,在存储和检索表中的数据时,字符串大小也有限制。目前,此限制为 4,000 个字符。在 8.1 版本之前,这个限制是 2,000 个。虽然这个限制对于存储短字符串和单词不会造成任何问题,但当程序员需要在一个记录中存储大量文本时,它就成为一个严重的障碍。
Oracle 提供了一种名为 Character Large Object (CLOB) 的特殊列数据类型,允许存储最多 4 兆字节的字符数据。然而,将如此大量的数据存储在表中非常困难。Oracle 实际存储在表中的只是指向数据存储中实际数据所在位置的指针。这种技术是更复杂的过程的根源,首先需要将数据存储在 CLOB 列中,然后存储其他“原始”数据类型。仍然可以将字符串传递到 SQL INSERT
语句中,插入到具有 CLOB 数据类型的列中,但只有长度不超过 4,000 个字符的字符串才能以这种方式存储。
为了存储大量的文本,需要一个包含多个步骤的过程。以下是一个类示例,说明如何完成此操作
using System;
namespace InsertingCLOB
{
public class clsOracle
{
private System.Data.OracleClient.OracleConnection connOracle;
private System.Data.OracleClient.OracleDataReader rstOracle;
private System.Data.OracleClient.OracleCommand sqlCommandOracle;
private System.Data.OracleClient.OracleTransaction txn;
private System.Data.OracleClient.OracleLob clob;
public clsOracle()
{
string p_conn_db= "Data Source=" + OracleIP + ";User ID=" +
OracleUserName + ";PASSWORD=" + OraclePassword + ";";
connOracle = new System.Data.OracleClient.OracleConnection(p_conn_db);
connOracle.Open();
}
public void InsertRecord(string SQLStatement)
{
if (SQLStatement.Length>0)
{
if(connOracle.State.ToString().Equals("Open"))
{
sqlCommandOracle =
new System.Data.OracleClient.OracleCommand(SQLStatement,connOracle);
sqlCommandOracle.ExecuteScalar();
}
}
}
public void InsertCLOB(string SQLStatement, string str)
{
if (SQLStatement.Length>0)
{
if(connOracle.State.ToString().Equals("Open"))
{
byte[] newvalue = System.Text.Encoding.Unicode.GetBytes(str);
sqlCommandOracle=
new System.Data.OracleClient.OracleCommand(SQLStatement,connOracle);
rstOracle = sqlCommandOracle.ExecuteReader();
rstOracle.Read();
txn = connOracle.BeginTransaction();
clob = rstOracle.GetOracleLob(0);
clob.Write(newvalue, 0, newvalue.Length);
txn.Commit();
}
}
}
public void CloseDatabase()
{
connOracle.Close();
connOracle.Dispose();
}
}
}
将这个名为 clsOracle.cls 的类包含在你的项目中。现在,创建一个“保存”按钮来调用这个类,并使用下面的代码
private void btnSave_Click(object sender, System.EventArgs e)
{
clsOracle db=new clsOracle();
// example for primary key
string field_id = "1";
// insert 2 characters for addresing
string field_temp = "XX";
string sql = "Insert into table_nm values('" + field_id +
"', '" + field_temp + "')";
db.InsertRecord(sql);
sql="select news_text from table_nm +
"WHERE field_nm'" + field_id + "' FOR UPDATE";
db.InsertCLOB(sql, txtCLOBData.Text.ToString());
db.CloseDatabase();
}
关于 CLOB 地址的特性,我们需要先插入一条记录才能对其进行更新。然后,任务就完成了……