当我将SQL参数p
添加到集合中时,我得到一个InvalidCastException
,其中包含帖子标题中的消息。
parentId
是一个可以为空的整数,并且是数据库中可以为空的整数。
为什么我会得到这个例外,我该如何解决?
我没有使用存储过程,我已经读过类似的线程,但是他们没有帮助我。
var p = new SqlParameter("ParentId", SqlDbType.Int).Value = parentId ?? (object) DBNull.Value;
cmd.Parameters.Add(p);
答案 0 :(得分:14)
您没有添加new SqlParameter
。 p
是new SqlParameter("ParentId", SqlDbType.Int).Value = parentId ?? (object) DBNull.Value
的结果。换句话说,p
本身就是DBNull.Value
。
将声明分成两部分,如下所示:
var p = new SqlParameter("ParentId", SqlDbType.Int);
p.Value = parentId ?? (object) DBNull.Value;
cmd.Parameters.Add(p);
可替换地,
var p = new SqlParameter("ParentId", SqlDbType.Int) { Value = parentId ?? (object) DBNull.Value };
cmd.Parameters.Add(p);
要么确保p
是参数,而不是参数的值。
答案 1 :(得分:-2)
您需要使用:
System.Data.SqlTypes.SqlInt32.Null