昨天我发布了一个关于异常处理技术的问题,但我没有得到一个确切的答案,部分原因是我的问题一定不能准确。 所以我会更准确地问它。
我的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类的实例,所以我该如何返回消息?
我希望我说清楚了!
谢谢。答案 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;
// ....或其他一些通知
}
否则
{
// ...正常负载
}
我认为它会起作用。