2011-10-08 100 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