一年前,我询问了在.Net程序中读取DB2 EBCDIC数据的问题。 令人惊讶的有用答案包括阅读 VARCHAR 专栏的例行程序。
我现在面临着阅读CLOB专栏的问题。
它们的内部结构是否相似,因为第一个单词包含实际大小? 还是整个单词,考虑到 CLOB 的可能长度要大得多?
谢谢!
不是大型机,而是 DB2/400(中端)似乎从表本身外部存储 CLOB 字段:
CREATE TABLE QTEMP/T1 (F1 CLOB(512))
INSERT INTO QTEMP/T1 (F1) VALUES ('TEST')
SELECT * FROM QTEMP/T1
F1
*POINTER
DSPPFM QTEMP/T1
* . . . + . . . . 1 . . . . + . . . . 2 . . . . + . . . . 3 . .
00000000 00000000 00000000 00000000 5CD7D6C9 D5E3C5D9 40404040 40404040
*...+....1....+....2....+....3..
*POINTER
是否有任何特殊原因没有使用 DB/2 驱动程序访问数据库来处理所有这些详细信息? 这就像通过尝试解析 .中密度纤维板文件。
查看 IBM 红皮书 |有关更多信息,使用 DB2 for z/OS 和 OS/390 第 4.4.1 章 LOB 表空间组织的大型对象。
有关如何执行此操作的更详细的解释 http://ripalsoni.wordpress.com/2008/07/24/how-do-i-read-write-oracle-clob-data-in-aspnet-or-vbnet/
步骤 1:添加引用 – Oracle.Dataaccess.dll (在 ODP.NET 中找到)
步骤 2:导入以下命名空间
Imports Oracle.DataAccess.Client
Imports Oracle.DataAccess.Types
步骤 3:创建连接字符串
Public ReadOnly connectionstring = "data source = oradb;user id = rmsoni;password=rmsoni99"
步骤 4:创建以下公共方法
Public Sub ReadLOBData()
Dim con As New OracleConnection(connectionstring)
con.Open()
Dim sql As String = "select CLOBTEXTFIELD from TestCLOB where ID=1"
Dim cmd As OracleCommand = New OracleCommand(sql, con)
Dim dr As OracleDataReader = cmd.ExecuteReader()
dr.Read()
Dim blob As OracleClob = dr.GetOracleClob(0)
txtOutput.Text = blob.Value()
blob.Close()
dr.Close()
con.Close()
End Sub
完整的源代码 –
Public Sub WriteLOBData()
Dim connection As New OracleConnection(connectionstring)
connection.Open()
Dim strSQL As String = "INSERT INTO TestCLOB (ID,CLOBTEXTFIELD) VALUES (1,:TEXT_DATA) "
Dim paramData As New OracleParameter
paramData.Direction = ParameterDirection.Input
paramData.OracleDbType = OracleDbType.Clob
paramData.ParameterName = "TEXT_DATA"
paramData.Value = txtInput.Text
Dim cmd As New OracleCommand
cmd.Connection = connection
cmd.Parameters.Add(paramData)
cmd.CommandText = strSQL
cmd.ExecuteNonQuery()
paramData = Nothing
cmd = Nothing
connection.Close()
End Sub