SqlParameterCollection只接受非null的SqlParameter类型对象,而不接受DBNull对象

Eli*_*eth 10 c# sql ado.net sqlparameter

当我将SQL参数添加p到集合时,我得到一个InvalidCastException带有帖子标题的消息.

parentId 是数据库中的可空整数和可空整数.

为什么我会得到这个例外,我该如何解决?

我不使用存储过程,我已经读过类似的线程,但他们没有帮助我.

var p = new SqlParameter("ParentId", SqlDbType.Int).Value = parentId ?? (object) DBNull.Value;
cmd.Parameters.Add(p);  
Run Code Online (Sandbox Code Playgroud)

小智 16

你没有添加你的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);
Run Code Online (Sandbox Code Playgroud)

或者,

var p = new SqlParameter("ParentId", SqlDbType.Int) { Value = parentId ?? (object) DBNull.Value };
cmd.Parameters.Add(p);
Run Code Online (Sandbox Code Playgroud)

要么确保p参数,而不是参数的值.