我遇到了问题,我在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,有时它更大
谢谢
答案 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的实际消息。 希望这可以帮助任何有同样问题的人。