c# - 拆分数据访问和捕获数据以形成
问题描述
在我的项目中,我正在尝试编写易于理解的代码。我目前将我的数据访问功能拆分为一个单独的类。
然而,我想要实现的是将错误捕获回我的表单。我目前没有得到这个,我想知道为什么。
在我的表单中,我有以下代码:
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)吗?还是我会得到“错误”?如果我只是得到错误,我如何改进我的代码以显示异常而不是错误?
解决方案
一种简单的方法是从 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 显示它或根据错误代码生成自定义消息。
推荐阅读
- swift - 从 Swift 中的 Set<>.index 获取位置为 int
- java - Linux 僵尸进程未使用 Java ProcessBuilder 终止
- javascript - 在反应应用程序中包含和使用 javascript 文件
- apache-spark - spark如何管理物理内存、虚拟内存和执行器内存?
- intellij-idea - Grails删除方法
- javascript - 我怎么能避免所见即所得的按钮来点击链接
- c# - 如何停止在 .Net Core 控制器中创建的计时器?
- nestjs - 用 NestJS 和异步函数开玩笑
- algorithm - 如何计算重复 x 分钟后将播放哪一秒的歌曲?
- firebase - Firebase 控制台中不存在下载 URL