使用ParameterDirection从SQL函数获取值

时间:2014-09-09 11:26:28

标签: c# oracle oledbconnection oledbparameter

这是SQL函数:

create or replace FUNCTION "TEMPXML"
(
 ID IN NUMBER
)
RETURN CLOB IS
val CLOB;
BEGIN
 val:=null;
 BEGIN
  SELECT TEMPID INTO val FROM TEMPDATA WHERE TempdataID=I;
  exception
  when no_data_found then
   null;
 end;
return val;
END TEMPXML;

在C#中,我使用的是Parameter.ReturnValue,但返回的值始终是DBNull,我得到一个异常无法转换类型' System.DBNull'输入' System.String'

sqlCmdSelectReports.Parameters.Add(new OleDbParameter("@xmldata", OleDbType.LongVarChar)).Direction = ParameterDirection.ReturnValue;
sqlCmdSelectReports.ExecuteNonQuery();
String xmlValue = (String)sqlCmdSelectReports.Parameters["@xmldata"].Value;

最后一行抛出异常。我在C#中使用了错误的代码,或者SQL函数编码错误了吗?

1 个答案:

答案 0 :(得分:0)

看起来你只是从数据库中获得一个null,这并不是完全出乎意料的(no_ata_found等)

检查一下;一种方式(几种)是:

string xmlValue = sqlCmdSelectReports.Parameters["@xmldata"].Value as string;