1

質問が重複していたらすみません。私のソリューションには、コンソール アプリケーションと MVC4 Web サイトの 2 つのプロジェクトがあります。Oracle データベース 11g にアクセスするために Oracle マネージド ドライバを使用しています。次のストアド プロシージャからデータを取得しようとしています。

create or replace procedure "GETEMPIDS"
    (
       p_cursor OUT SYS_REFCURSOR
    )
is
begin
    OPEN p_cursor FOR
select *
    from EMP;
end;​

コンソール アプリケーションでエンティティやその他のものを作成した後、次のようにしてデータを取得します。

 public List<GETEMPIDS_Result> GetAllEmployees()
        {
            Entities db = new Entities();
            List<GETEMPIDS_Result> result = db.GETEMPIDS().ToList<GETEMPIDS_Result>();
            return result;
        }

このコンソール アプリケーションの参照を Web サイトに追加しましたが、コントローラーで上記のメソッドを呼び出すと、例外が発生します。

"ORA-06550: line 1, column 8:\nPLS-00306: wrong number or types of arguments in call to 'GETEMPIDS'\nORA-06550: line 1, column 8:\nPL/SQL: Statement ignored"}

コンテキストクラスの次の行で

public virtual System.Data.Entity.Core.Objects.ObjectResult<GETEMPIDS_Result> GETEMPIDS()
        {
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<GETEMPIDS_Result>("GETEMPIDS");
        }

足りないものはありますか?

4

2 に答える 2

0

プロシージャはパラメータとしてGETEMPIDS受け入れp_cursor OUT SYS_REFCURSORます。どうやら、ResultSet を宣言してプロシージャに渡す必要があるようです。このような:

ResultSet rs = new ResultSet;
List<GETEMPIDS_Result> result = db.GETEMPIDS(  rs  ).ToList<GETEMPIDS_Result>();

おっと、ResultSet は Java 用です。タグに C# があることに気づきませんでした。とにかく、あなたがその考えを理解してくれることを願っています。

于 2015-04-13T10:30:58.787 に答える