在VB.NET中将CLOB转换为可用的String

时间:2011-10-08 21:44:31

标签: .net vb.net clob

我正在编写一个从Oracle数据库中检索数据的工具。大多数字段都是VARCHAR2,但是我想要检索的一个特定字段是CLOB。我正在尝试将此CLOB中的文本转换为字符串,然后我可以对其运行正则表达式以隔离某些信息,然后在程序的控制台中显示该信息。不幸的是,我似乎无法弄清楚如何将这个CLOB转换为可用的字符串。

我尝试了很多不同的东西,但我现在得到的是:


    With OraDynaset
        If .RecordCount > 0 Then
            .MoveFirst()
            While (Not .EOF Or .BOF)
                m_StrThis = .Fields("This").Value
                clobSupportProcs = .Fields("That").Value
                m_strThat = (clobSupportProcs).ToString
                .MoveNext()
            End While
        End If
    End With

字段“This”工作正常,因为它不是CLOB。 “那个”字段是麻烦制造者。我在其他帖子中读过,有一种方法可以将这些内容流式传输到可用的内容中,但我还没有看到一个明确的示例,说明如何完成。

我很感激任何建设性意见或帮助。我知道使用CLOB并不需要开始 - 但是这个数据库已经超过10年了。我无法控制。我知道我以不太优雅的方式连接到数据库。我不在乎。我只需要这两点信息。我不是专业人士,只是一个人试图编写一个让他的生活更轻松的工具。任何帮助深表感谢。无益的评论不是。

谢谢!

2 个答案:

答案 0 :(得分:1)

我使用ODAC(Oracle数据访问组件)与PowerShell合作使用Oracle CLOB。

http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html

http://download.oracle.com/docs/cd/B28359_01/win.111/b28375.pdf

ODAC库允许您使用VB.NET或C#来使用Oracle。

  1. 创建一个'Oracle.DataAccess.Client.OracleConnection'对象并连接。
  2. 创建'Oracle.DataAccess.Client.OracleCommand'查询命令 对象。
  3. 从命令对象'ExecuteReader()'
  4. 获取reader对象
  5. 迭代记录'while(reader.Read())'
  6. 在这里处理......

    $id = $reader.getstring(0) # DOCUUID
    $xmlDoc = [xml] $reader.getstring(1) # XML (THIS IS THE CLOB)
    $datasetName = $reader.getstring(2) # DATASETNAME
    
  7. 以下是更新clob(PowerShell代码)

    的方法
    $sql = "UPDATE GPT_METADATA SET XML = :1 WHERE DOCUUID = '" + $id + "'"
    $updateCmd = New-Object Oracle.DataAccess.Client.OracleCommand ($sql, $conn)
    
    $param = New-Object Oracle.DataAccess.Client.OracleParameter (
       "xml", #Name
       [Oracle.DataAccess.Client.OracleDbType]::Clob, #Type
       $xmlDoc.OuterXml, #Data
       'Input' #Direction
     )
    
  8. 执行更新

    $newParam = $updateCmd.Parameters.Add($param) 
    $result = $updateCmd.ExecuteNonQuery()
    

答案 1 :(得分:1)

我终于能够通过玩可能的属性和方法来解决这个问题。

解决方案是:

Dim clobSupportProcs As OracleInProcServer._IOraClob
Dim clobSize As Integer
Dim clobOut As String

With OraDynaset
        If .RecordCount > 0 Then
            .MoveFirst()
            While (Not .EOF Or .BOF)
                m_StrThis = .Fields("THIS").Value
                clobSupportProcs = .Fields("THAT").Value
                clobSize = clobSupportProcs.size

                If clobSize > 0 Then
                    clobSupportProcs.Read(clobOut)
                    m_strThat= clobOut
                Else
                    m_strThat= "None"
                End If

                .MoveNext()
            End While
        End If
    End With

所以基本上,你把clob读成一个字符串(clobOut)。