0

バックエンドで Oracle 11g を使用して ASP.NET Web アプリを開発しています。データベーステーブルからユーザーログインデータとフラグを取得するための別の SP を作成しました。FetchUserLoginData() メソッドで以下のコード スニペットを見つけてください。

String spName = "FETCH_USER_LOGIN_ROLE_DATA";

            OracleCommand dbCheckLogin=new OracleCommand();
            OracleDataReader LoginDataReader=null;

            dbCheckLogin = dbCon.GetDBCommand(spName,dbCheckLogin);

            dbCheckLogin.Parameters.Add(new OracleParameter("USERID", LoginID));
            dbCheckLogin.Parameters.Add(new OracleParameter("USERPWD", Password));

            dbCheckLogin.Parameters.Add(new OracleParameter("USERGUI_ID", OracleType.VarChar,2000)).Direction = ParameterDirection.Output;
            dbCheckLogin.Parameters.Add(new OracleParameter("ADMIN_FLG", OracleType.VarChar,20)).Direction = ParameterDirection.Output;
            dbCheckLogin.Parameters.Add(new OracleParameter("CLOSED_FLG", OracleType.VarChar,20)).Direction = ParameterDirection.Output;
            dbCheckLogin.Parameters.Add(new OracleParameter("LOCKED_FLG", OracleType.VarChar,20)).Direction = ParameterDirection.Output;
            dbCheckLogin.Parameters.Add(new OracleParameter("LOGGEDIN_FLG", OracleType.VarChar,20)).Direction = ParameterDirection.Output;
            dbCheckLogin.Parameters.Add(new OracleParameter("USER_FLG", OracleType.VarChar,20)).Direction = ParameterDirection.Output;
            dbCheckLogin.Parameters.Add(new OracleParameter("SEASED_FLG", OracleType.VarChar,20)).Direction = ParameterDirection.Output;

            LoginDataReader = dbCheckLogin.ExecuteReader();


            while (LoginDataReader.Read())
            {

                user.USER_SL = Convert.ToString(LoginDataReader["USER_SL"]);
                user.ISADMIN=LoginDataReader["ISADMIN"].ToString();
                user.ISCLOSED = LoginDataReader["ISCLOSED"].ToString();
                user.ISLOCKED = LoginDataReader["ISLOCKED"].ToString();
                user.ISLOGGEDIN = LoginDataReader["ISLOGGEDIN"].ToString();
                user.ISPOWERUSER = LoginDataReader["ISPOWERUSER"].ToString();
                user.ISSEASED= LoginDataReader["ISSEASED"].ToString();
            }

問題は、SPなしで実行しようとしたときに、直接クエリを作成して実行するだけで問題はなく、データベースからデータを完全に取得できることです。SP の場合、例外が発生しました: No DATA Found. 毎回正しいユーザー名とパスワードを指定していますが、それでもデータを取得できません。SQLDeveloper または PL/SQL からプロシージャを実行しようとしても、問題は見つかりませんでした。問題は、サーバー側のコーディングから SP を実行しようとしたときにのみ発生します。

4

1 に答える 1

0

私にとってうまくいったのは、SPから返される参照カーソルを追加することです。SPに問題があり、今それを理解しました。カーソル、DataTable、DataSet、DataReader、DataAdapters を返さないと、SP からフェッチされるはずのデータが取得されません。他の人の助けになる場合は、ここで完全な SP を提供します。

CREATE OR REPLACE PROCEDURE FETCH_USER_LOGIN_ROLE_DATA
(
 USERID IN VARCHAR2  
,USERPWD IN VARCHAR2
,OUT_CURSR OUT SYS_REFCURSOR
) 
AS 
BEGIN
OPEN OUT_CURSR FOR
   SELECT 
      U.ROWID,U.USER_SL,U.ISADMIN,U.ISPOWERUSER,
      U.ISLOCKED,U.ISCLOSED,U.ISSEASED,U.ISLOGGEDIN
   FROM USERS U
   WHERE U.USER_ID=USERID AND
         U.USER_PWD=USERPWD;
END FETCH_USER_LOGIN_ROLE_DATA;
于 2013-05-30T00:47:24.567 に答える