Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# Database Access: DBNull vs null

Tags:

c#

null

orm

dbnull

We have our own ORM we use here, and provide strongly typed wrappers for all of our db tables. We also allow weakly typed ad-hoc SQL to be executed, but these queries still go through the same class for getting values out of a data reader.

In tweaking that class to work with Oracle, we've come across an interesting question. Is it better to use DBNull.Value, or null? Are there any benefits to using DBNull.Value? It seems more "correct" to use null, since we've separated ourselves from the DB world, but there are implications (you can't just blindly ToString() when a value is null for example) so its definitely something we need to make a conscious decision about.

like image 342
David Wengier Avatar asked Aug 15 '08 22:08

David Wengier


3 Answers

I find it better to use null, instead of DB null.

The reason is because, as you said, you're separating yourself from the DB world.

It is generally good practice to check reference types to ensure they aren't null anyway. You're going to be checking for null for things other than DB data, and I find it is best to keep consistency across the system, and use null, not DBNull.

In the long run, architecturally I find it to be the better solution.

like image 117
Dan Herbert Avatar answered Oct 28 '22 19:10

Dan Herbert


If you've written your own ORM, then I would say just use null, since you can use it however you want. I believe DBNull was originally used only to get around the fact that value types (int, DateTime, etc.) could not be null, so rather than return some value like zero or DateTime.Min, which would imply a null (bad, bad), they created DBNull to indicate this. Maybe there was more to it, but I always assumed that was the reason. However, now that we have nullable types in C# 3.0, DBNull is no longer necessary. In fact, LINQ to SQL just uses null all over the place. No problem at all. Embrace the future... use null. ;-)

like image 29
jeremcc Avatar answered Oct 28 '22 21:10

jeremcc


From the experience I've had, the .NET DataTables and TableAdapters work better with DBNull. It also opens up a few special methods when strongly typed, such as DataRow.IsFirstNameNull when in place.

I wish I could give you a better technical answer than that, but for me the bottom line is use DBNull when working with the database related objects and then use a "standard" null when I'm dealing with objects and .NET related code.

like image 3
Dillie-O Avatar answered Oct 28 '22 20:10

Dillie-O