数据库返回数据的卫生处理
本文关键字:处理 返回 数据 数据库 | 更新日期: 2023-09-27 17:47:47
我想知道每个人都认为处理自己数据库中结果的最佳方法是什么。其他团队可能也会参与进来,程序/数据总是有可能被更改,并出现错误的结果。我的问题是。是让异常发生、捕获并记录它更好,还是尝试处理所有意外事件并隐藏错误更好?比如,下面的内容。
if (dr.Table.Columns.Contains("column") && !dr["column"].Equals(DBNull.Value))
{
this.value = (type)dr["column"];
}
else
{
this.value= null;
}
就我个人而言,我喜欢快速失败——当然,还有一条适当的道歉用户消息。有一些东西值得恢复,但像一个你期望为非null的专栏对我来说更重要
当然,我也会尝试设置一些烟雾测试,以确保您在生产前了解它:)
数据库约束应该为您解决大部分问题。对于没有的,我建议回到数据库设计并修复这些限制。
否则,最好在该字段上返回一个异常,以便修复(或删除)数据。
处理您认为值得处理的一切,并在发生"不可能"的事情时捕获异常。
正如@AviewAnew所说,你可能有点偏执,但这并不意味着你错了!
我本以为丢失的列会比空值糟糕得多,那么为丢失的列抛出异常怎么样?
try // wrap everything in a try/catch to handle things I haven't thought of
{
if ( !dr.Table.Columns.Contains("column") )
{
throw new SomeSortOfException("cloumn: " + column + " is missing" );
}
else // strictly don't need the else but it makes the code easier to follow
{
if (dr["column"].Equals(DBNull.Value))
{
this.value= null;
}
else
{
this.value = (type) dr["column"];
}
}
}
catch( SomeSortOfException ex )
{
throw;
}
catch( Exception ex )
{
// handle or throw impossible exceptions here
}
另一方面。。。如果您要在整个代码中进行所有这些检查,那么维护开销将相当大。。。这是另一件需要考虑的事情。
你的电话!
我会尽你的努力确保它不会发生,或者尽量减少发生的可能性。
例如,来自jonkeet的帖子。如果您期望一列的条件不是null,那么该列是否有约束?如果没有,您可能会期待它,因为DBA/DB开发人员告诉您会是这样。我会告诉他们,你将依赖这一事实,并鼓励、督促、哄骗他们添加非零约束。如果您期望的是唯一的值,那么就要求一个唯一的约束。只有大写字符,添加检查约束。你的代码检查所有大写字母,然后检查下一个应用程序、下一个程序和下一个可以做一次的应用程序,这没有什么意义。记住DRY——不要重复。
对于缺失的列错误,我的主动方法是确保数据库开发团队了解应用程序使用哪些表、视图和过程。每个应用程序都应该有自己的用户名,每个应用程序的用户名应该只在它需要的表上进行选择-不是作为安全功能,而是作为文档。如果您更改此表,则这些应用程序将使用它。与procs相同,将执行权限授予使用它的应用程序。如果你保持这种严格的态度,并灌输"在进行更改时检查外部依赖性"的态度,你会避免很多错误。