帮助ASP.NET C#应用程序中的异常处理

时间:2010-05-11 06:50:57

标签: c# asp.net exception-handling

昨天我发布了一个关于异常处理技术的问题,但我没有得到一个确切的答案,部分原因是我的问题一定不能准确。 所以我会更准确地问它。

我的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不存在,那么它会给我一个错误或任何其他SQLException。由于这个方法是从我的aspx.cs页面调用的,所以我希望返回一些意义完整的消息,告知可能出现的问题,以便用户知道存在一些问题并且他/她应该重新登录。 / p>

但我不能因为该方法返回User类的实例,所以我该如何返回消息?

我希望我说清楚了!

谢谢。

2 个答案:

答案 0 :(得分:1)

你可以在这里采取很多方法,如果找不到合适的用户对象(因为例外),很容易返回null。然后在调用代码中只测试null,如果为null则显示错误消息。

例如

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

这将是一个基本的方法。

答案 1 :(得分:0)

您有很多方法,但在您的方法中声明了“SqlDataReader reader = null;”有时候如果条件为“if(reader.Read())”,你会收到错误,因为你声明为null。

public static UsersEnt LoadUserInfo(string email)

{

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;
    // ....或其他一些通知
}
否则
{
    // ...正常负载
}

我认为它会起作用。