在我的项目中,我试图编写很难理解的代码。 我目前将数据访问功能拆分为单独的类。
我想要实现的目标是将错误记录回我的表单。我目前没有得到这个,我想知道为什么。
在我的表格中,我有以下代码:
private void btn_Save_ItemClick(object sender, ItemClickEventArgs e)
{
if (dal.updatePerson(ObjectAfterSaving))
{
MessageBox.Show("Updated!");
}
else
{
MessageBox.Show("error");
};
}
在我的dal对象(源自DataAccess_Person class
)中,我有以下方法:
public bool updatePerson(Person p)
{
conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Database"].ConnectionString);
SqlCommand command = new SqlCommand(@"UPDATE Person
SET PersonName = @PersonName
WHERE PersonID = @PersonID", conn);
command.Parameters.Add("@PersonName", SqlDbType.VarChar).Value = p.Name
{
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
int a = command.ExecuteNonQuery();
conn.Close();
if (a > 0)
{
return true;
}
else
{
return false;
}
}
catch (SqlException ex)
{
ex.ToString();
return false;
}
}
}
我的问题是:让我们说我的方法是否属于捕获量。我的前端(表单)会显示它(例如Sql Exception)吗?或者我会得到错误' ?如果我只是得到错误,我如何改进我的代码以显示异常而不是错误?
答案 0 :(得分:3)
一种简单的方法是从DAL中删除try catch并将其添加到表单中。例如:
private void btn_Save_ItemClick(object sender, ItemClickEventArgs e)
{
var result = "Success";
try
{
dal.updatePerson(ObjectAfterSaving);
}
catch (SqlException sqlEx)
{
result = sqlEx.Message;
}
catch (Exception ex)
{
result = ex.Message;
}
MessageBox.Show(result);
}
请注意,您可以通过多种方式执行此操作。我的偏好是不在我的UI中包含DAL特定的异常类型。相反,我可能会返回一个包含错误代码和消息的自定义结果类型,并让我的UI显示该错误代码或根据错误代码生成自定义消息。
答案 1 :(得分:1)
如果是SqlException
,您只会收到“错误”。如果您没有全局异常处理程序,则所有其他异常都将使程序崩溃。如果要显示错误消息,可以为错误消息引入out
变量:
bool successful = MyMethod(out string errorMessage)
if (!successful)
{
MessageBox.Show(errorMessage);
}
public bool MyMethod(out string errorMessage)
{
errorMessage = "";
try
{
// do some stuff
return true;
}
catch(Exception ex)
{
errorMessage = ex.Message;
return false;
}
}