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

我想知道哪种用法是正确的?

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

要么

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

 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

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

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

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

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

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

看这里:

http://ideone.com/iGo1Jh