Преобразование CLOB в пригодную для использования строку в VB.NET - PullRequest
1 голос
/ 09 октября 2011

Я пишу инструмент для извлечения данных из базы данных 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

Поле «Это» работает нормально, так как это не CLOB. Поле «Это» является нарушителем спокойствия. Я читал в других постах, что есть способ превратить это в куски во что-то пригодное для использования, но я еще не видел четкого примера того, как это делается.

Буду признателен за любые КОНСТРУКТИВНЫЕ комментарии или помощь. Я понимаю, что использование CLOB не было необходимости для начала - этой базе данных уже более 10 лет. Я не могу это контролировать. Я понимаю, что подключаюсь к базе данных менее элегантным способом. Меня это не волнует. Мне просто нужны эти два маленьких кусочка информации. Я не профессионал, просто парень, пытающийся написать инструмент, который облегчит его жизнь. Буду признателен за любую оказанную помощь. Бесполезных комментариев нет.

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Я наконец смог понять это, поиграв с возможными свойствами и методами.

Решение:

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 голос
/ 10 октября 2011

Я работал с Oracle CLOB с PowerShell, используя ODAC (Oracle Data Access Components).

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. Перебирать записи' while (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()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...