2

私はEntityFrameworkを初めて使用し、Oracleストアドプロシージャを呼び出そうとしましたが、成功しませんでした。だからここに私の質問があります:

devart dotConnectを使用してOracleストアドプロシージャを呼び出す方法は?

たとえば、ストアドプロシージャがあります。

procedure get_problems(res out sys_refcursor) is
  begin

   open res 
   for
   select id, name
   from problems;  

  end;

そして、C#から私は電話をかけています:

 using (Entities entities = new Entities())
 {
     ObjectParameter res = new ObjectParameter("res", typeof(byte[]));
     ObjectResult<PROBLEM> problems = entities.SelectAllProblems(res);
 }

ただし、「EntityCommandExecutionException」がスローされます。

コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。

これが内部例外です:

ORA-06550:行2、列3:\ nPLS-00306:'GET_PROBLEMS'の呼び出しで引数の数またはタイプが正しくありません\nORA-06550:行2、列3:\ nPL / SQL:ステートメントが無視されました

使用しました

"typeof(byte [])"

これは、DevartEntityDeveloperの生成されたコードで見たためです。

psちなみに、大規模なプロジェクトでdotConnectをどのように推奨しますか?

4

2 に答える 2

0

当ブログのこちらの記事を参考にしてください。フォーラムまたはフィードバックページ
からお問い合わせください。

于 2011-04-15T12:59:04.697 に答える
0

これは少し前に尋ねられたことは知っていますが、これを理解するのに時間がかかったので、他の誰かを助けるかもしれません. パッケージ (P_SID) 内でストアド プロシージャ (SID_PGet) を呼び出し、DotConnect を使用して単一の文字列値を返す方法を次に示します。(これは単一の値のみを返します-現在、sys_refcursor を返す方法を見つけようとしています)。

ストアド プロシージャは次のとおりです。

PROCEDURE SID_PGet(io_SID OUT varchar2) is
Begin
   io_SID:=GetSID; -- GetSID returns a unique varchar value
End;

C# の DbContext では、次のようになります。

public string GetNextSId()
{
    var parameter = new Devart.Data.Oracle.OracleParameter("io_SID", Devart.Data.Oracle.OracleDbType.VarChar, ParameterDirection.Output);
    this.Database.ExecuteSqlCommand("BEGIN P_SID.SID_PGet(:io_SID); END;", parameter);
    var sid = parameter.Value as string;

    return sid;
}
于 2012-05-23T09:09:14.503 に答える