DbNull.Value和DbNull.Value.ToString()之间的区别

时间:2013-11-20 09:32:23

标签: c# dbnull sqlparameters

我想了解哪种用法是正确的?

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 个答案:

答案 0 :(得分:5)

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

这是将parentID传递给参数@ParentSesID。

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

null值传递给参数。

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

传递等于string.Empty,这在数值数据类型中是不允许的。

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

与忽略参数相同。

因此,当您需要将null传递给SP时,您必须通过DBNull.Value

答案 1 :(得分:2)

这一个:cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value));是正确的,如果您要写入的字段可以接受数据库中的NULL值。

这一个:cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value.ToString()));如果该字段是a,例如VARCHAR,并且不接受NULL,但您想以某种方式表明该字段中缺少值,所以你在你的应用程序特定的“无值”值内写。因此,您的应用程序知道,如果它在字段中找到该值,则表示:没有值。

答案 2 :(得分:1)

DBNull.Value.ToString()将返回空字符串,所以我想

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

是一种很好的方法,这是唯一的方法

见这里:

http://ideone.com/iGo1Jh