バックエンドで 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 を実行しようとしたときにのみ発生します。