【问题标题】:Reading db2 clob from binary download从二进制下载中读取 db2 clob
【发布时间】:2012-05-18 00:11:19
【问题描述】:

一年多以前,我询问有关在 .Net 程序中读取 DB2 EBCDIC 数据的问题。非常有用的 answer 包含一个读取 VARCHAR 列的例程。

我现在面临阅读 CLOB 列的问题。

它们的内部结构是否相似,第一个单词包含实际大小?或者是整个单词,考虑到 CLOB 的可能长度要大得多?

谢谢!

【问题讨论】:

  • 似乎对于 VarCahr 的前 2 个字节保持实际大小,对于 CLOB,它的前 4 个字节。很高兴听到确认或其他...

标签: .net db2 clob ebcdic


【解决方案1】:

似乎不是大型机而是 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 driver 访问数据库来处理所有这些细节是否有任何特殊原因?这就像通过尝试解析 .MDF 文件来读取 SQL Server。


有关详细信息,请参阅IBM Redbooks | Large Objects with DB2 for z/OS and OS/390 第 4.4.1 章 LOB 表空间组织

【讨论】:

  • 原因是我不希望我的销售过程依赖于获得直接链接到银行大型机的权限...
【解决方案2】:

这是一个更详细的说明如何做到这一点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

【讨论】:

  • 感谢详细的答案,但正如标签明确指出的那样,我需要为 DB2 数据执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多