【问题标题】:Help with Exception Handling in ASP.NET C# Application帮助 ASP.NET C# 应用程序中的异常处理
【发布时间】:2010-05-11 06:50:56
【问题描述】:

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

我的 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 页面调用的,因此我想返回一些有意义的完整消息,说明可能出了什么问题,以便用户了解存在问题并且他/她应该再次重试登录。

但我不能,因为该方法返回 User 类的实例,所以我怎样才能返回消息呢??

我希望我说清楚了!

谢谢。

【问题讨论】:

  • 业务逻辑层不负责向用户提供反馈 - 只是向表示层提供反馈。您可以向 PL 抛出异常,并让 PL 在尝试 LoadUserInfo 的页面上显示错误消息。

标签: c# asp.net exception-handling


【解决方案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
}

这将是一个基本的方法。

【讨论】:

    【解决方案2】:

    您有很多方法,但在您的方法中声明了“SqlDataReader reader = null;”有时你会在 if 条件 "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; 
    

    }

    然后

    用户我们 = LoadUserInfo(email);
    if(us.Exception != null)
    {
    ErrorLabel.Text = "无法登录。";
    ErrorLabel.Visible = true;
    //.... 或其他一些通知
    }
    其他
    {
    //... 正常加载
    }

    我认为它会起作用。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 2013-05-28
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      相关资源
      最近更新 更多