2011-10-08 98 views
1

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

我已经尝试了很多不同的东西,但我一直在此刻得到的是:


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 

字段“这”工作得很好,因为它不是一个CLOB。 “那个”领域是麻烦制造者。我已经在其他文章中读到过,有一种方法可以将这些数据流分成可用的东西,但我还没有看到一个清晰的例子来说明这是如何完成的。

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

谢谢!

+0

为什么任何人在一个字符串可以满足时使用blob?它不是一个字符串,你必须寻找定义二进制格式的人。毫无疑问,早已消失,我们无法帮助您找回他。 –

+0

哇,@JoelCoehoorn,不错的举动。 –

回答

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)。

1

我使用ODAC(Oracle Data Access Components)与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库将允许您与Oracle合作与VB.NET或C#。

  1. 创建一个'Oracle.DataAccess.Client.OracleConnection'对象并连接。
  2. 创建一个'Oracle.DataAccess.Client.OracleCommand'查询命令 对象。
  3. 从命令对象的ExecuteReader()“
  4. 遍历记录 '而(reader.Read())'
  5. 做处理在这里得到读者对象...

    $id = $reader.getstring(0) # DOCUUID 
    $xmlDoc = [xml] $reader.getstring(1) # XML (THIS IS THE CLOB) 
    $datasetName = $reader.getstring(2) # DATASETNAME 
    
  6. 这里是如何更新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 
    ) 
    
  7. 执行更新

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

这太棒了,谢谢发帖! – Crownedjitter