0

Oracle プロシージャから返された ref カーソルを .Net アプリケーションに戻そうとしていますが、パラメーターの数が間違っているというエラーが発生し続けます。

Oracle プロシージャには次のパラメータがあります。

PROCEDURE sp_user_list(pv_username     IN VARCHAR2
                        ,pn_result      OUT NUMBER
                        ,pv_error       OUT VARCHAR2
                        ,pref_user_list OUT SYS_REFCURSOR);

私のデータアクセスコードは:

public int GetUserID(string sUserName)
        {
            int iUserID = 0;

            Database db = DatabaseFactory.CreateDatabase();

            string sql = "pk_quality.sp_user_list";
            DbCommand cmd = db.GetStoredProcCommand(sql);

            db.AddInParameter(cmd, "pv_username", DbType.String, sUserName);
            db.AddOutParameter(cmd, "pn_result", DbType.Int32, 2);
            db.AddOutParameter(cmd, "pv_error", DbType.String, 500);


            using (IDataReader dataReader = db.ExecuteReader(cmd))
            {
                while (dataReader.Read())
                {
                    iUserID = int.Parse(dataReader["user_id"].ToString());
                }
            }

            return iUserID;
        }

refカーソルを処理するためにoutパラメーターを追加できるrefカーソルdbtypeはないようです。私は何か間違ったことをしていますか?

4

1 に答える 1

1

refcursor 出力パラメータもコマンド オブジェクトに追加する必要があります。

cmd.Parameters.Add(
     new OracleParameter("pref_user_list", 
                         OracleDbType.RefCursor, 
                         ParameterDirection.Output));

これは、ODP.NET データ プロバイダーで機能します。DbType 列挙型には、refcursor に対応する型がありません。ただし、データ アクセス クラスに Oracle 参照を追加すると、DAAB の原則に違反しているように見える場合があります。

于 2012-06-28T18:01:04.747 に答える