2013-05-27 7 views
0

Я разрабатываю веб-приложение ASP.NET с использованием Oracle 11g на бэкэнд. Я написал отдельный SP для извлечения данных пользователя и флажков из таблицы базы данных. Вы можете найти ниже фрагмент кода в FetchUserLoginData() Метод:Почему ORA-01403: Нет данных Найдено ошибка

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 у меня есть исключение: Нет обнаруженных данных. Я даю правильное имя пользователя и пароль каждый раз, но он не может получать какие-либо данные. Даже я пытался запустить процедуру из SQLDeveloper или PL/SQL и не обнаружил никаких проблем. Проблема заключается только в том, что я пытался выполнить SP с кодирования на стороне сервера.

+0

Есть ли причина, по которой вы проходили «LoginID» дважды? Вы использовали одно и то же значение для имени пользователя и пароля? – codingbiz

+0

@codingbiz: это была ошибка типографии. Я исправил его в коде, но не работает. DataReader не может извлекать данные из таблицы. – jchoudhury

+0

Попробуйте добавить команду вывода в sqlcommand FETCH_USER_LOGIN_ROLE_DATA', а затем выяснить, что это проблема в текущем sql. – jarvanJiang

ответ

0

Вещь, которая работала для меня, заключается в том, чтобы добавить опорный указатель, который будет возвращен из SP. Возникла проблема с SP, и теперь я понял это. Без возврата курсора DataTable, DataSet, DataReader, DataAdapters не получают никаких данных из 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; 
Смежные вопросы