Справка по обработке исключений в приложении ASP.NET C # - PullRequest
1 голос
/ 11 мая 2010

вчера я опубликовал вопрос, касающийся техники обработки исключений, но я не получил точного ответа, отчасти потому, что мой вопрос не должен быть точным. Поэтому я попрошу это более точно.

В моем BLL есть метод для аутентификации пользователя. Если пользователь аутентифицирован, он возвращает мне экземпляр класса User, который я сохраняю в объекте сеанса для дальнейших ссылок. метод выглядит примерно так ...

public static UsersEnt LoadUserInfo(string email)
{
    SqlDataReader reader = null;
    UsersEnt user = null;

    using (ConnectionManager cm = new ConnectionManager())
    {
        SqlParameter[] parameters = new SqlParameter[1];

        parameters[0] = new SqlParameter("@Email", email);

        try
        {
            reader = SQLHelper.ExecuteReader(cm.Connection,
                    "sp_LoadUserInfo", parameters);
        }
        catch (SqlException ex)
        {
            //this gives me a error object
        }

        if (reader.Read())
            user = new UsersDF(reader);
    }

    return user;
}

Теперь моя проблема в том, что если SP не существует, то он выдаст мне ошибку или любое другое исключение SQLE в этом отношении. Поскольку этот метод вызывается со страницы aspx.cs, я хочу вернуть какое-то полное сообщение о том, что могло пойти не так, чтобы пользователь понимал, что возникла какая-то проблема, и что он / она должен повторить попытку входа в систему.

но я не могу, потому что метод возвращает экземпляр класса User, так как я могу вместо этого вернуть сообщение ??

Надеюсь, я ясно дал понять!

спасибо.

Ответы [ 2 ]

1 голос
/ 11 мая 2010

Есть много подходов, которые вы могли бы использовать здесь, и было бы проще вернуть null, если вы не можете найти подходящий объект пользователя (из-за исключения). затем в вызывающем коде вы просто проверяете на нулевое значение, и если оно равно нулю, отображается сообщение об ошибке.

например

User u = LoadUserInfo(email);
if(u == null)
{
    ErrorLabel.Text = "Could not log in.";
    ErrorLabel.Visible = true;
    //.... or some other notification
}
else
{
    //... normal load
}

это был бы базовый способ сделать это.

0 голосов
/ 11 мая 2010

Есть много подходов, которые у вас есть, но в своем методе вы объявили "SqlDataReader reader = null;" несколько раз вы получите ошибку при условии if «if (reader.Read ())», потому что вы объявили как ноль.

общедоступная статическая UsersEnt LoadUserInfo (строка электронной почты)

{

SqlDataReader reader = new  SqlDataReader();

UsersEnt user = null; 

using (ConnectionManager cm = new ConnectionManager()) 
{ 
    SqlParameter[] parameters = new SqlParameter[1]; 

    parameters[0] = new SqlParameter("@Email", email); 

    try 
    { 
        reader = SQLHelper.ExecuteReader(cm.Connection, 
                "sp_LoadUserInfo", parameters); 
        if (reader.Read()) 
             user = new UsersDF(reader); 

    } 
    catch (SqlException ex) 
    { 
        user.Exception=ex.Message;        
    } 

} 

return user; 

}

, а затем

Пользователь us = LoadUserInfo (электронная почта);
if (us.Exception! = null)
{
ErrorLabel.Text = "Не удалось войти в систему.";
ErrorLabel.Visible = true;
// .... или другое уведомление
}
еще
{
// ... нормальная загрузка
}

Я думаю, что это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...