ORA-06550存储过程错误

时间:2018-01-02 09:32:48

标签: c# asp.net-mvc oracle11g

我有这样的商店程序

PROCEDURE PRC_ABCD_GETALL (resultset_out OUT TYPES.cursorType)
AS
BEGIN
OPEN 
resultset_out FOR SELECT * FROM ABCD;
END PRC_ABCD_GETALL;

并且此程序在包中,包就像这样

create or replace
PACKAGE        V4_EVT_PKG_ABCD_GENERAL
AS
PROCEDURE PRC_ABCD_GETALL (resultset_out OUT TYPES.cursorType);
END V4_EVT_PKG_ABCD_GENERAL;

,oracle数据提供程序是system.data.oracleClient,前面的代码是这个

public static IEnumerable<PortalList> GetAll()
{
  Database db = DatabaseFactory.CreateDatabase();
  DbCommand objComm = db.GetStoredProcCommand("package_name.sp", new 
  object[1]);          
  var result = new List<PortalList>();         
  using (IDataReader rdr = db.ExecuteReader(objComm))
  {            
    while (rdr.Read())
    {                   
      result.Add(Construct(rdr));               
    }           
  }         
return result;

}

现在我发现system.data.oracleClient已被删除,我想使用Oracle.DataAccess.Client作为数据提供者我为此编写了C#代码但是我遇到了一些错误,例如调用中的错误数量或参数类型到&#39; PRC_ABCD_GETALL&#39;在此函数中PortalListRepository.GetAll();

private static IEnumerable<PortalList> GetAll(bool forceDataReload)
{
    const string cacheKey = "PortalListService_GetAll";
    IEnumerable<PortalList> result = null;
    if (!forceDataReload)
        result = GetFromCache(cacheKey);
    if (result == null)
    {
        result = PortalListRepository.GetAll();
        AddToCache(cacheKey, result);
    }

    return result;
 }

我无法解决。

C#代码

public static IEnumerable<PortalList> GetAll()
{
  string cnn = "connectionstring";
  var result = new List<PortalList>();
  using (OracleConnection conn = new OracleConnection(cnn))
  {
        conn.Open();
        OracleCommand cmd = new OracleCommand();
        cmd.Connection = conn;
        cmd.CommandText = "PRC_ABCD_GETALL";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("resultset_out", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
        OracleDataReader rdr = cmd.ExecuteReader();              
        while (rdr.Read())
        {
            result.Add(Construct(rdr));
        }
    }
    return result;
}

我对此非常陌生,我不知道如何解决它。任何人都知道我在C#代码或我的商店程序或我的包裹中做错了什么?请帮助我尝试了将近3周,但没有运气:((

1 个答案:

答案 0 :(得分:1)

最后,经过几个星期哦,上帝把我的头撞到了墙上几周之后,我解决了这个错误。为什么我遇到这个错误是我在我的64位操作系统中安装了32位oracle 12c这就是为什么它无法加载oracle的程序集.data.accesss dll和它会抛出这些异常。

Sollution: 转到你的项目 - &gt; property-&gt; built-&gt;任何cpu或64bit我做了任何cpu它解决了我的问题。

有关详细信息,请访问以下链接:

https://rambletech.wordpress.com/2011/09/26/could-not-load-file-or-assembly-oracle-dataaccess-error/