获取Oracle.DataAccess.Types.OracleClob而不是实际值

时间:2014-07-30 21:30:49

标签: asp.net vb.net oracle odp.net clob

我遇到了问题,我在oracle 11g上调用了一个程序,prucedure收到一个clob并用另一个CLOB,VARCHAR2和一个Number响应。使用oracle数据提供程序(ODP.NET)从ASP.NET(在Visual Basic)网页上调用该过程,我可以成功调用该过程,查看VARCHAR2和NUMBER返回的值,但是当我尝试查看返回的值时我得到的返回CLOB是" Oracle.DataAccess.Types.OracleClob"而不是期待的XML

我知道返回的XML是生成的,因为在存储过程中我创建了一个txt文件,它显示了预期的结果

我的代码现在非常简单:

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大约为55Kb,有时它更大

谢谢

1 个答案:

答案 0 :(得分:0)

我设法找到答案,如果有人遇到同样的问题,基本上必须要做的是创建另一个clob,仅用于vb.net,clob将从过程中接收参数输出的值,然后转换为字符串变量本地clob。

示例:

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

现在“output”变量保存clob的实际消息。 希望这可以帮助任何有同样问题的人。