Difference between DbNull.Value and DbNull.Value.T

2019-03-02 17:42发布

I wanted to learn which usage is true?

if(!string.IsNullOrEmpty(parentID))
   cmd.Parameters.Add(new SqlParameter("@ParentSesID", parentID));
else
   cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value));

OR

if(!string.IsNullOrEmpty(parentID))
   cmd.Parameters.Add(new SqlParameter("@ParentSesID", parentID));
else
   cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value.ToString()));

3条回答
Rolldiameter
2楼-- · 2019-03-02 18:22

This one: cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value)); is a correct, in case the field you are writing to can accept NULL value in database.

This one: cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value.ToString())); if the field is a, say, VARCHAR, and does not accept NULL, but you want to indicate in some way an absence of value in that field, so you write inside your application specific "no value" value. So your application knows, if it founds that value in the field, that means: no value.

查看更多
冷血范
3楼-- · 2019-03-02 18:32

DBNull.Value.ToString() will return empty string, so I think

cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value));

is a good approach and here the only approach

see here:

http://ideone.com/iGo1Jh

查看更多
疯言疯语
4楼-- · 2019-03-02 18:36
cmd.Parameters.Add(new SqlParameter("@ParentSesID", parentID));

This is passing a parentID to parameter @ParentSesID.

cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value));

is passing a null value to parameter.

cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value.ToString()));

is passing equal to string.Empty, which is not allowed in numerical data types.

cmd.Parameters.Add(new SqlParameter("@ParentSesID", null);

is same as ignoring the parameter.

So when you need to pass null to SP you've to pass DBNull.Value.

查看更多
登录 后发表回答