我们在这里使用自己的ORM,并为所有数据库表提供强类型包装器。我们还允许执行弱类型的临时SQL语句,但这些查询仍然通过同一类来从数据读取器中获取值。
在将该类调整为与Oracle配合使用时,我们遇到了一个有趣的问题。是更好地使用DBNull.Value还是null?使用DBNull.Value是否有任何好处?使用null似乎更“正确”,因为我们已经将自己与数据库世界分离开来,但是有一些影响(例如,在值为空时不能盲目地使用 ToString()
),因此这绝对是我们需要做出明智决定的事情。
我发现使用null比DB null更好。
原因是,正如你所说,这样可以将自己与数据库世界分离开来。
一般来说,检查引用类型以确保它们不为null是良好的编程实践。你将会为除DB数据以外的事物检查null值,我发现最好在整个系统中保持一致性,使用null而不是DBNull
。
从长远来看,在架构上,我认为这是更好的解决方案。
根据我的经验,.NET DataTables 和 TableAdapters 与 DBNull 的配合更好。当强类型时,它还会开启一些特殊方法,例如 DataRow.IsFirstNameNull。
我希望我能给你一个更好的技术答案,但对我来说,最重要的是在处理与数据库相关的对象时使用 DBNull,而在处理对象和 .NET 相关代码时使用“标准” null。
使用 DBNull
。
在使用 null 时,我们遇到了一些问题。
如果我没记错的话,你不能将 null 值插入到字段中,只能使用 DBNull。
可能仅与 Oracle 相关,抱歉,我不再知道详细信息。