调用函数时,与Oracle Number和varchar2相关的OleDbType是什么?

时间:2010-02-03 00:45:35

标签: oracle ado.net oledb

我正在尝试将OleDb参数映射到Oracle函数。我能够使用System.Data.Oracle命名空间执行此操作,但后来发现这已被删除,因此我认为我会将其重新编写为OldDb以避免安装Oracle Provider。

我已经定义了以下oracle函数作为示例:

create function GetImagePath (AIRSNumber in number)
   return varchar2
is
   begin
     return '\\aiimg524\images\Ofndrtrk\2010\01\0kvrv1p000lcs74j';
   end;

我正在使用以下代码调用它:

using (var command = new OleDbCommand())
        {
          command.Connection = con;
          command.CommandText = ConfigurationManager.AppSettings[OTRAK_PHOTO_FUNC];
          command.CommandType = CommandType.StoredProcedure;

          string parm = ConfigurationManager.AppSettings[OTRAK_PHOTO_PARM];

          command.Parameters.Add(parm, OleDbType.Decimal); // maps to oracle Number
          command.Parameters[parm].Direction = ParameterDirection.Input;
          command.Parameters[parm].Value = airsNumber;

          command.Parameters.Add(RETURN_VALUE, OleDbType.Variant); // maps to Oracle varchar2
          command.Parameters[RETURN_VALUE].Direction = ParameterDirection.ReturnValue;
          try
          {
            con.Open();
            command.ExecuteNonQuery();
            path = command.Parameters[RETURN_VALUE].Value.ToString();
          }

我为参数和返回值尝试了一堆不同的OleDB类型。当前的尝试来自我在网上找到的映射表,其中number = decimal和varchar2 = variant。我即将尝试枚举中每种类型的排列,并希望寻求帮助。我得到的不太有用的错误信息是:

  

[System.Data.OleDb.OleDbException] = {“ORA-06550:第1行,第7列:\ nPLS-00306:调用'GETIMAGEPATH'\ nORA-06550:第1行的参数数目错误:第7列:\ nPL / SQL:语句忽略“}

1 个答案:

答案 0 :(得分:1)

这实际上与参数的类型无关,而是顺序。使用OleDb提供程序不支持参数集合中参数的名称,而是参数的添加顺序。当调用oracle函数时,返回值是必须首先声明的自由参数。通过添加我的返回值参数然后实际的函数参数开始工作。

使用command.Parameters.AddWithValue(parm,value)也简化了一些事情。