Получить Oracle.DataAccess.Types.OracleClob вместо фактического значения

У меня проблема, я вызываю процедуру на оракуле 11g, процедура получает clob и отвечает другим CLOB, VARCHAR2 и числом. Процедура вызывается с веб-страницы ASP.NET (на Visual Basic) с использованием поставщика данных оракула (ODP.NET), я могу успешно вызвать процедуру, просмотреть возвращаемые значения VARCHAR2 и NUMBER, но когда я пытаюсь увидеть возвращаемое значение возвращающийся CLOB все, что я получаю, это "Oracle.DataAccess.Types.OracleClob" вместо ожидаемого XML

Я знаю, что возвращенный XML генерируется, потому что в процедуре хранения я создаю текстовый файл, в котором он показывает ожидаемый результат.

Мой код сейчас довольно прост:

Function Index() As String 'ActionResult
        Dim xml_message As String

        Dim oradb As String = "Data Source=127.0.0.1;User Id=id;Password=pass;"
        Dim conn As New OracleConnection(oradb)
        Dim oracleDataAdapter As New OracleDataAdapter
        oracleDataAdapter = New OracleDataAdapter()

        Dim cmd As New OracleCommand
        cmd.Connection = conn

        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "Common.GetDriverPoints"

        cmd.BindByName = True

        Dim driver_input As New OracleParameter()
        driver_input = cmd.Parameters.Add("p_driver", OracleDbType.Clob)
        driver_input.Direction = ParameterDirection.Input
        driver_input.Value = <THE_SENDED_XML_VALUE>

        Dim driver_output As New OracleParameter()
        driver_output = cmd.Parameters.Add("p_output", OracleDbType.Clob)
        driver_output.Direction = ParameterDirection.Output

        Dim error_flag As New OracleParameter()
        error_flag = cmd.Parameters.Add("p_Return", OracleDbType.Int16)
        error_flag.Direction = ParameterDirection.Output

        Dim error_desc As New OracleParameter()
        error_desc = cmd.Parameters.Add("p_ReturnDesc", OracleDbType.Varchar2, 100)
        error_desc.Direction = ParameterDirection.Output

        conn.Open()

        cmd.ExecuteNonQuery()

        Dim output As String
        output = driver_output.Value.ToString() 'This only returns Oracle.DataAccess.Types.OracleClob

        conn.Close()
        conn.Dispose()

        Return output
    End Function

Кроме того, сгенерированный xml составляет около 55 КБ, иногда больше.

Спасибо


person user3893178    schedule 30.07.2014    source источник
comment
Вы не можете использовать ToString(). Это возвращает значение метода по умолчанию для типа driver_output.Value, а не самих данных clob. Вам нужно вызвать любой метод (я не знаю, что у меня на уме), чтобы получить фактические данные clob. Может быть, это просто значение? См. документы здесь - docs.oracle.com/html/B28089_01/OracleClobClass.htm# i1030678   -  person OldProgrammer    schedule 31.07.2014
comment
Затем он дает преобразование из типа «OracleClob» в тип «String» недопустимо. Мне нужно вернуть строку, если я попробую то же самое, но с выходом он дает мне значения, например, output = driver_output.Value. ToString() работает и возвращает мне значение, и я знаю, что это значение попадает в базу данных.   -  person user3893178    schedule 31.07.2014


Ответы (1)


Мне удалось найти ответ. Если у кого-то возникла такая же проблема, в основном нужно создать еще один clob, используемый только для vb.net, этот clob получит значение параметра, выводимого из процедуры, а затем приведите к строковой переменной локальный clob.

Пример:

Dim output As String
Dim myOracleClob As OracleClob = driver_output.Value
output = System.Convert.ToString(myOracleClob.Value)

Теперь переменная «output» содержит фактическое сообщение clob. Надеюсь, это поможет любому с той же проблемой.

person user3893178    schedule 31.07.2014